一、数组:
1. 定义语法 :
1)使用array关键字:最常用
$变量 = array(元素1,元素2,元素3…);
2)使用中括号:
$变量 = [元素1,元素2,元素3…];
3)隐形定义数组:给变量加中括号
$变量[] =值1;
$变量[下标] = 值;//中括号里内容称为下标key
注:下标可以是字母,单词或数字
<?php
// 定义数组:隐型数组
$arr[] = 1; // 默认给数组第0个元素赋值
$arr[10] = 100; // 第10个元素赋值
$arr[] = '1'; // 第11个。默认下标是从当前最大下标
$arr['key'] = 'key'; // 第key个
$arr[1] = 'value' // 第1个,但不会自动调整,还是会处于最后一个位置
var_dump($arr);
// 结果为:array(5) { [0]=> int(1) [10]=> int(100) [11]=> string(1) "1" ["key"]=> string(3) "key" [1]=> string(5) "value" }
2. PHP数组特点
1)可以整数下标或者字符串下标
- 若数组下标均为整数,则称为索引数组
- 若数组下标均为字符串,则称为关联数组。
- 混合下标的话称为混合数组
2)数组元素的顺序以放入顺序为准,与下标无关
3)数字下标的增长特性:从0开始自动增长,若中间手动加入较大的下标,则后面则会从当前最大下标+1增长。
4)特殊值下标的自动转换
<?php
// 特殊下标自动转换
$arr1[false] = false;
$arr1[true] = true;
$arr1[NULL] = NULL;
var_dump($arr1);
// array(3)([0]=>bool(false),[1]=>bool(true) [""]->NULL)
5)PHP数组中类型元素没有限制。
6)PHP中数组元素没有长度限制。
3. 多维数组
二维数组
数组中所有的元素都是一维数组
多维数组
在第二维的数组元素中可以继续是数组,在PHP中没有维度限制(PHP本质并没有二维数组)
异形数组(不规则数组)
异形数组:数组中的元素不规则,有普通基本变量也有数组。
二、数组遍历
1. foreach遍历
- foreach遍历原理:
本质是数组的内部有一颗指针,默认是指向数组元素的第一个元素,foreach就是利用指针去获取数据,同时移动指针。
1、 foreach会重置指针:让指针指向第一个元素;
2、 进入foreach循环:通过指针取得当前第一个元素,然后将下标取出放到对应的下标变量$k中(如果存在),将值取出来放到对应的值变量$v中;(指针下移)
3、 进入到循环内部(循环体),开始执行;
4、 重复2和3,直到在2的时候遇到指针取不到内容(指针指向数组最后)
2. for循环遍历数组
条件:
1) 获取数组长度:count(数组)得到数组元素的长度
2) 要求数组元素的下标是规律的数字
3. While配合each和list遍历数组
1)Each函数使用:each能够从一个数组中获取当前数组指针所指向的元素的下标和值,拿到之后将数组指针下移,同时将拿到的元素下标和值以一个四个元素的数组返回:
- 0下标 : 取得元素的下标值
- 1下标 :取得元素的值
- key下标 :取得元素的下标值
- value下标:取得元素的值
2)List函数使用:list是一种结构,不是一种函数(没有返回值),是list提供一堆变量去从一个数组中取得元素值,然后依次存放到对应的变量当中(批量为变量赋值:值来源于数组):
list必须从索引数组中去获取数据,而且必须从0开始。
- 正确操作:
- 错误操作:变量多于数组元素,没有指定从0到指定变量的下标的数组元素。因为$second变量对应的下标是1,但是数组中没有下标是1
3)List与each配合
each一定有两个元素就是0和1下标元素
list(变量1,变量2) = each(数组);
//是一种赋值运算,但是可以得到false结果(each取不到正确的结果),整个表达式为false
三、数组相关的函数
1. 排序函数:
对数组元素进行排序,都是按照ASCII码进行比较,可以进行英文比较
- sort():顺序排序(下标重排)
- rsort():逆序排序
- asort():顺序排序(下标保留)
- arsort():逆序排序
shuffle():随机打乱数组元素,数组下标会重排
2. 指针函数
reset() | 重置指针,将数组指针回到首位 |
end() | 重置指针,将数组指针指导最后一个元素 |
next() | 指针下移,取得下一个元素的值 |
prev() | 指针上移,取得上一个元素的值 |
current() | 获取当前指针对应的元素值 |
key() | 获取当前指针对应的下标值 |
注意事项:next和prev会移动指针,有可能导致指针移动到最前或者最后(离开数组),导致数组不能使用,通过next和prev不能回到真确的指针位置。只能通过end或者reset进行指针重置
3. 其他函数
count() | 统计数组中元素的数量 |
array_push() | 往数组中加入一个元素(数组后面) |
array_pop() | 从数组中取出一个元素(数组后面) |
array_shift() | 从数组中取出一个元素(数组前面) |
array_unshift() | 从数组中加入一个元素(数组前面) |
array_reverse() | 数组元素反过来 |
in_array() | 判断一个元素在数组中是否存在 |
array_keys() | 获取一个数组的所有下标,返回一个索引数组 |
array_values() | 获取一个数组的所有值,返回一个索引数组 |