一、什么是数组?
数组是一种复合数据类型,是数据的集合。
数组中的数据称为元素,每个元素是由键和值组成的键值对。
二、数组分类
1、关联数组
数据是由键和值形式构成的数组,键和值有一定关系
$arr = array(‘dbhost’=>’localhost’, ‘dbuser’=>’root’, ‘dbpwd’=>’123456);
2、下标数组,索引数组
它的键只是表示元素的位置,它和数据没有太大的关联
下标默认是从0开始的
3、一维数组
数组中元素没有数组类型的数据
4、多维数组
数组中的元素有数组类型的数据
三、数组元素的遍历方法
使用专门用于的foreach循环结构可以很方便的遍历数组元素
在遍历数组时,它是使用指针来操作数组元素。
初始时,指针指向第一个元素,下一次循环开始前,指针向前移动,指向下一个元素
如果我们在foreach遍历时,增加元素
发现foreach并没有把新增加的元素遍历到!
- 实际上,foreach用来遍历的数组变量是一个原数组变量的拷贝!
- 关于$k 和 $v这两个变量实际上是一个临时的变量
它不是数组元素,每一次遍历,都会把当前元素的键和值赋给$k和$v
它也是键或 值的一个拷贝
采用引用方式时,将真正的修改原数组元素的值
注意:引用方式的问题
应该怎么办?
在使用引用方式的情况,退出foreach后要unset($v)
四、和数组指针有关的函数
Key() 获取当前元素的键的数据
Current() 获取当前元素的值
Next() 指针向后移动一次
Prev() 指针向前移动一次
End() 指针移动到最后一个元素
Reset() 指针移动到第一个元素
指针如果出界的情况
可以通过使用reset()或end()调整回去
五、利用each()来遍历数组
each() = key() + current() + next()
使用each时,当前元素返回4个值,两个是键,两个是值的内容
先可以使用一个叫list()的函数配合each()
配合这张图
六、COW(copy on write)写时复制
我们在讲变量时,传值赋值时,两个变量先是使用同一个数据容器。
当其中一个的值发生改变时,才会发生容器的复制或者叫重新分配。
我们使用一个函数memory_get_usag()
七、数组函数
1、统计函数
Count() 用于统计数组中元素的个数
可以给出函数的第二个参数,就可以使用递归统计的方式来计算元素个数
Count($arr, 是否递归方式,默认时是false)
正常统计是5个元素,递归方式是8个(统计完一维,又进行子数组进行统计)
Array_sum() 用于统计数组中元素的和
Array_product() 用于计算所有数组元素的乘积
2、创建数组
Array_fill(起始下标,元素数,元素的值)
Range() 建立一个指定范围数值的数组
还可以给出步进值,不写时默认是1
Array_combine() 把两个数组的元素合成一个数组,第一个参数数组的值作为键,第二个参数数组的值作为对应的值
3、变量和数组元素相互转换
Compact() 把变量通过其变量名加入到数组中
Extract() 把数组中的元素从数组中抽取出来,用它的键作为变量名,元素的值作为值
List() 把数组中的元素值赋给变量
如果中间不需要的元素可以加一个空的逗号,不给出变量名
4、判断
In_array() 判断给出的值是否和数组中某个元素的值相等
Array_key_exists() 判断给出变量值是否与数组元素中某个元素的键的值相等
判断函数经常用于程序中对传递参数的合法性进行比对(和配置参数)判断
5、键值操作
Array_keys() 可以把一个数组中元素的键返回组成一个新的数组
Array_valuse() 把数组元素的值返回组成一个新的数组
Array_flip() 交换数组元素的键和值的位置
注意:如果值有重复的,键值交换位置后,后面的覆盖前面的,元素会变少
键是不能重复的,值可以。
Shuffle() 打乱数组元素的顺序
Array_unique() 去除数组中重复的元素
6、数组和字符串相互转换
Implode() 把数组中元素用分隔符连接成一个字符串
Explode() 把字符串使用分隔符隔开的内容保留到数组中
这两个函数是互逆的
7、模拟栈操作
数据在栈区,就有几种行为方式
先进先出,先进后出,后进先出,后进后出
Array_push() 把数据压入数组的末尾
元素下标会依次增大
Array_unshift() 把数据压入数组的头部
Array_pop() 把数组中的数据从尾部去掉一个
我们模拟了一个后进行先出
Array_shift() 把数组中的数据从头部去掉一个
利用回调函数处理数据
Array_map() 将回调函数作用数组的元素对元素进行处理
一个特殊的使用方法:省略回调函数名,此时如果输入参数是两个数组,则会对两个数组进行简单的合并
我们也可以在回调函数处使用系统内置好的函数,参数也可以是多个
上面就是一个比较三个数组对应元素最大值的例子
Array_walk() 对数组中的每个元素应用用户编写的函数
注意:
回调函数接收的参数,前面是值,后面是键,值可以使用引用方式
8、排序
Sort() 对数组元素进行按值的从小到大的再排序
注意:下标会重新分配
那么,键值数组排序后是什么情况?
值会按顺序重新排列,但键将丢失,改成使用下标方式
Rsort() 根据数组元素的值进行从大到小重新排列
和sort()特征一样,只是值从大到小
Ksort() 根据元素的键进行从小到大的重新排序
Krsort() 根据元素的键进行从大到小的排序
特征同上
Asort() 对数组元素进行从小到大的重新排序,并保持下标不变
Arsort() 对数组元素进行从大到小的重新排序,并保持下标不变
特征和上面一样
Natsort() 对数组元素进行自然排序
Sort()实际是按字符从左到右依次比较其ascii码值来判断大小
Usort() 使用用户自定义的比较函数对数组中的值进行排序
排序结果
要点:比较的规则
正序时,等于返回0,小返回-1,大返回1
倒序时,等于返回0,小返回1,大返回-1
9、拆分合并
Array_slice() 从数组中取出一段
注意:数组元素下标是从0开始的,因此第二个参数代表元素位置
Array_chunk() 把数组分成多个小的数组
第二个参数用于表明分割后的子数组有几个元素
此函数还有第三个参数,用于表明是否分割后带着键,默认为false,不带键
Array_merge() 用于合并多个数组为一个大数组
注意:此函数可以接收多个数组类型的参数,如果有重复的数据,用第一个数组的元素。
我们讲运算符,有一个数组运算符+,行为是不是和这个是一样的。
Array_rand() 随机给出数组元素
注意:结果给出的不是值!而是键!!!
增加第二个参数,会设置随机几个数据出来。默认是1个。
Array_intersect() 取多个数组的交集
Array_diff() 取两个数组元素中不同的数据
注意:如果不相同的元素具有相同的键,则值用左边数组的
我是小咖
决胜心法:上面所说皆可以在php官方手册上找到。
发个邀请:
如果你正好想学习php,可以与我一起交流,我的VX:feilueze333。下面资料免费赠送。