1. 什么是数组
所谓数组,里面存储的是一组数据
2. PHP数组的分类
PHP数组分为2类:索引数组,关联数组
索引数组:所谓索引数组,就是和其他语言一样,下标是从0开始的数字,如下:
关联数组:键名和值有一定的业务逻辑关系。这个在其他编程语言里面很少见,使用字符串作为数组的下标
3.PHP数组的声明
① 直接赋值声明数组
语法:$数组名[下标|键名] = 值
索引数组的申明:
关联数组的声明
由于PHP是一门动态语言,和JavaScript一样,申明数组的时候不需要指定数组的大小。数组的大小可以动态的增加。动态语言!=动态类(实例化对象,就是初始化变量)
② 使用array()函数来申明数组
语法:$数组名 = array();
申明索引数组
声明关联数组
因为数组也是PHP中8大数据类型中的一种,所以可以通过var_dump()来查看数据类型,除此之外,还可以通过print_r()函数也可以查看和打印出数组
使用print_r():
数组相关几个小知识点:
- 当我们使用第1种方法申明索引数组的时候,如果索引值从0开始依次递增,那么可以不用写索引值
2.可以索引数组和关联数组混搭风格,但是一般没人这么用
3.如果键名重复,后面的会覆盖前面的
③ 多维数组的申明
由于PHP数组里面的数据类型可以是任意类型,所以可以在一个数组里面又装入一个数组,形成多维数组。
如下:
除了索引,我们也可以创建关联的多维数组
取到多维数组里面的值的方法和其他语言一样的,如下:
打印结果就是”李四”
课堂练习:用一个3维数组将下面3张表格的信息装进去
④ 数组的遍历
和大多数编程语言一样,我们可以通过for循环来遍历一个数组,如下:
For循环只能遍历索引数组,不能遍历关联数组
② 通过foreach来遍历数组(必须掌握)
foreach(数组名 as $key => $value)
如下:
效果:
还有一种写法,就是当我们不想要键名的时候
foreach(数组名 as $value)
如下:
③ list(),each()
List():功能主要是将数组里面的所有值依次赋值给list里面的所有变量
语法:
List(变量名1,变量名2,变量名3) = 数组名
如下:
可以通过空的逗号来跳过某些值
List()只能用于索引数组,不能用于关联数组
如下:
Each():返回一个数组,这个数组里面有4个键,0,1,key,value。
0和key都是表示键名,1和value都是表示值
Each每使用一次,数组的指针向后移动一位。
如下:
通过while配合list和each就可以遍历数组
如下:
Foreach 与 each的区别 foreach遍历数组,每使用一次,数组指针仍然为0(初始位置);each遍历数组,每使用一次,数组指针向下移动一位
④ 在PHP里面,有一套关于操纵数组指针的函数
Current():取得当前指针位置的数组值,每个数组都有一个内部的指针指向它当前的单元,初始指向插入到数组单元的第一个单元。
Key():取得当前指针位置的数组的键名
Next():将数组指针向后移动一位
Prev():将数组指针向前移动一位
End():直接将数组指针移动到最后
Reset():重置数组指针,移到最开头的地方
- 预定义数组
效率比用户自定义的高
所谓预定义数组,就是php系统给你定义好了的,你直接拿来就可以用的数组。
超全局数组有很多:
这里只列举一个简单的$GLOBALS
5.数组相关函数
① 数组键和值操纵相关函数
- Array_value():返回数组里面所有的元素值。将数组里面的所有值返回为一个新的索引数组
2.Array_keys():返回数组里面所有的元素值。将数组里面的所有值返回为一个新的索引数组
3.In_array():检查数组中是否存在某个值
该函数接受3个参数 in_array(查找值,数组,是否严格),如果写上1(true),那么就是开启严格模式
默认状态:非严格模式
还有一个和in_array()效果差不多的函数array_search(),唯一不同之处就是返回值不同,array_search()是返回元素的键名
Array_key_exists():检查某一个键是否存在于数组里面,如果存在返回值为true,否则返回false
4.Array_flip():返回一个交换了键和值的新数组。
5.Array_reverse():将数组里面的元素的顺序进行翻转,原数组不变,返回新的数组
② 统计相关的数组函数
Count(数组名);
Count(数组名,1/true):统计数组里面元素的个数,第二个参数表示计算多维数组的个数
Array_count_values():用于统计一个数组所有值各自出现的次数
Array_unique():用于删除数组里面的重复值,并返回一个新数组。返回的新数组里面,被保留下来的元素的键名是没有被改变
③使用回调函数来处理数组
回调函数:将一个函数A作为参数传递到另外一个函数B里面,在函数B里面执行函数A
Array_filter():自己写一个函数来对一个数组进行过滤,返回的新数组里面符合要求的元素的键名会被保留
语法:array_filter(数组名,”函数名”)
Array_walk():写一个自定义的函数,对数组中的每一个元素都应用这个函数。如果成功返回TRUE,否则返回FALSE。
Array_walk(数组,回调函数,函数的参数)
Array_map():写一个自定义函数,对数组进行处理,并且可以返回一个新的数组
Array_map(函数名,数组名1,数组名2,数组名3…)
Array_map对多个数组进行处理
Array_walk和array_map之间的区别:
Array_walk()函数只是使用传进来的数组的键和值,本身不会对原来的数组有任何影响,哪怕强行改变,也不行
Array_map()同样也是将数组里面的值应用到函数,但是应用后的节后可以返回给一个新数组
Array_map()可以处理多个数组,但是Array_walk()只能处理一个数组
数组排序相关函数
在PHP里面,系统直接给我们提供了一套常用的数组排序函数
Sort()和rsort():这两个算是一组函数,sort就是从小到大,rsort就是从大到小
Sort()函数示例:
Rsort()函数示例:
Asort和arsort:这两个也算是一组函数,和上面一组的功能是一样的,只不过会保留原来的键名
Assort示例:
Ksort和krsort:根据键名来排序
按照自然排序法来进行排序:
所谓自然排序,就是按照人类的思维来排序,例如”12”是大于”2”,如果是字典排序,那么“12” 小于“2”
Natsort()
Natcasesort():还是根据自然排序来排序,但是会忽略大小写
数组的拆分,合并,分解等相关函数
- Array_slice():从数组里面截取一部分元素
语法:array_slice(数组名,开始的键名,截取多少个,[true|false])
如果最后一个参数设置为TRUE,保留原来的键名
2.Array_splice():从数组里面选择一系列的元素,并将其删除或者用其他的值来代替,返回值是返回被删除掉的元素
参数一共可以接受4个参数
Array_combine():合并两个数组,使其成为一个新的数组,其中一个数组为键名,另外一个数组为元素的值
Array_merge():合并数组,如果键名重复,那么后面的会覆盖前面的
Array_merge还有一个用处:可以给索引数组重新排序进行索引
Array_intersect():用于计算数组的交集。
该函数可以求多个数组
Array_diff():和上面的函数刚好相反,返回第一个数组里面没有在后面数组出现过的元素。
数据结构相关的函数
Array_push():向数组尾部添加一个或者多个元素,并且返回新数组的长度
Array_pop():删除数组中最后一个元素,并将数组减1,返回值是弹出的元素
Array_shift()和array_unshift()
这个也是一组函数,刚才的push和pop是在数组尾部做工作,这两个函数是在数组头部做工作
Array_unshift():向数组头部添加一或者多个元素,并且返回新数组的长度
Array_shift():删除数组中第一个元素,并将数组减1,返回值是弹出的元素
其他数组相关函数
- Array_rand():从数组里面随机挑选出1个或者多个元素并且返回。返回值是一个索引值,根据索引值来找到相应的元素
返回多个随机值示例:会忘记怎么写
shuffle():将原来数组的顺序打乱,键名也会重新排号
Range(起始值,终值,间隔):创建一个包含指定范围的数组
Array_sum():计算数组中值的总和
PHP数组其他相关知识
1. 数组运算符号
在PHP里面,数组可以使用+号来进行相加工作
如果使用+号来合并两个数组,和array_merge不同的地方是,
array_merge()键名(必须是字符串的键名,如果是数字,则附加在后面,不会产生覆盖)相同,后面的覆盖前面的,
但是+号刚好相反,如果键名相同,保留最开始的值
==和===
PHP的数组也可以通过==和===进行相等的判断,如下:
==:具有相同的键值对则为TRUE。
===:具有相同的键值对,并且数据类型相同,顺序也要相同才返回TRUE
如果想要删除数组中某一个元素,直接使用unset()
需要注意的是,如果删除数组里面的某一个元素,后面的元素的索引值不会发生改变,还是保留之前的索引值。