一、数组的概念
数组:array,数据的组合,指将一组数据(多个)存储到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器中所有的数据。
二、数组定义语法
在PHP中系统提供多种定义数组的方式
1、使用array关键字:最常用的
$变量 = array(元素1,元素2,元素3…);
2、可以使用中括号包裹数据
$变量 = [元素1,元素2,元素3];
3、隐形定义数组:给变量增加一个中括号,系统自动变成数组
$变量[] = 值1; //如果不提供下标也可以,系统会自动生成(数字:从0开始)
$变量[下标] = 值; //中括号里面的内容称之为下标(英文称之为key) ,该下标可以是字母(单词)或者数字,与变量命名的规则相似。
三、PHP数组的特点
1)可以整数下标或者字符串下标:
如果数组下标都为整数:索引数组
如果数组下标都为字符串:关联数组
2)不同下标可以混合存在:混合数组
3)数组元素的顺序已放入顺序为准,跟下标无关。
4)数字下标的自增长特性:从0开始自动增长,如果中间手动出现较大的,那么后面的自增长元素从最大值+1开始。
5)特殊值下标的自动转换
布尔值:true和false
空:NULL
6)PHP中数组元素没有类型限制。
7)PHP中数组元素没有长度限制。
补充:PHP中的数组很大的数据,所以存储位置是堆区,为当前数组分配一块连续的内存。
四、多维数组
1、多维数组:数组里面的元素又是数组。
2、二维数组
二维数组:数组中所有的元素。
3、多维数组
在第二维的数组元素中可以继续是数组,在PHP中没有维度限制(PHP本质并没有二维数组)
但是不建议使用超过三维以上的数组,会增加访问的复杂度,降低访问效率。
4、异型数组(不规则数组)
异型数组:数组中的元素不规则,有普通基本变量也有数组。
在实际开发中,并不常用,尽量用数组元素规则化(便于进行访问)
五、数组遍历
1、遍历的基本含义
数组遍历:普通数组数据的访问都是通过数组元素的下标来实现访问,如果说数组中所有的数据都需要依次输出出来,就需要我们使用到一些简化的规则来实现自动获取下标以及输出数组元素。
$arr =array(0 => array('name' => 'Jim'),1 => array('name' => 'Tom'),2 => array('name' => 'Lily')); //二维数组
//访问一维元素:$arr[一维下标]
$arr[0]; //结果:array('name' => 'Jim');
//访问二维元素:$arr[一维下标][二维下标]
$arr[1]['name']; //Tom
2、Foreach遍历语法
基本语法:
foreach($数组变量 as [$下标 =>] $值){ //这里的[ ]符号是代表可有可无
//通过$下标访问元素的下标;通过$值访问元素的值
}
获取下标的方式:
在进行数据存储定义的时候,通常二维数组不会两个维度的key下标为数字,一般是一维为数字(无意义),二维为字符串(数据库表字段),所以在进行遍历的时候,通常是只需要针对一维进行遍历,取得二维数组元素,然后二维数组元素通过下标去访问。
通常不会这样一层一层的遍历
3、Foreach遍历原理
Foreach遍历的原理:本质是数组的内部有一颗指针,默认是指向数组元素的第一个元素,foreach就是利用指针去获取数据,同时移动指针。
foreach($arr as $k => $v){
//循环体
}
1)foreach会重置指针:让指针指向一个元素;
2)进入foreach循环,通过指针取得当前第一个元素,然后将下标取出放到对应的下标变量$k中(如果存在),将值取出来放到对应的值变量$v中;(指针下移)
3)进入循环内部(循环体),开始执行。
4)重复2和3直到在2的时候遇到指针取不到内容(指针指向数组最后)
六、For循环遍历数组。
For循环:基于已知边界条件(起始和结束)然后有条件的变化(规律)
因此:for循环遍历数组有对应条件
1、获取数组的长度:count(数组)得到的数组元素的长度
2、要求数组元素的下标是规律的数字
优化过的代码:
1、while配合each和list遍历数组
while是在外部定义边界条件,如果要实现可以和for循环。
Each函数使用:each能够从一个数组中获取当前数组指针所指向的元素的下标和值,拿到之后将数组指针下移,同时将拿到元素下标和值,以一个四个元素的数组返回:
0、下标 ——》取得元素的下标值。
1、下标——》取得元素的值
key下标——》取得元素的下标值
value下标——》取得元素的值
如果each取不到结果(数组指针移动到最后),返回false
LIst函数使用:list是一种结构,不上一种函数(没有返回值),是list提供一堆变量去从一个数组中取得元素值,然后依次存放到对应的变量中(批量为变量赋值):list必须从索引数组中去获取数据,而且必须是从0开始。
错误操作:变量多于数组元素,没有指定从0到指定的变量的下标数组元素
list与each配合特别好:each一定有两个元素就是0和1下标元素
list(变量1,变量2) = each(数组); //是一种赋值运算,但是可以得到false结果(each取不到正确的结果),整个表达式为false