数组:array,数字的组合,将一组数据存储到一个指定的容器中,用变量指向该容器,可以通过变量一次性得到该容器中的所有数据。
数组定义语法:
1、使用array关键字(常用):
$变量名 = array(元素1,元素2,元素3);
2、使用中括号来包裹数据:
$变量名 = [元素1,元素2,元素3];
3、隐形定义数组:给变量增加一个中括号,系统自动变成数组
$变量名[] = 值1; //如果不提供下标也可以,系统自动生成数字下标(从0开始);
$变量名[下标] = 值; //中括号里面的内容称之为下标 key,该下标可以是字母(单词)或者数字,与变量命名的规则相似
PHP数组特点
1、可以使用整数下标或者字符串下标;
如果数组下标都为整数 : 索引数组
如果数组下标都为字符串 :关联数组
2、不同下标可以混合存在 :混合数组
3、数组元素的顺序以放入顺序为准,跟下标无关;
4、数字下标的自增长性:
5、特殊值下标的自动转换;
6、PHP中数组元素没有类型限制 ;
7、PHP中的数组元素没有长度限制;
Ps:PHP中的数组是很大的数据,所以存储的位置是堆区,为当前数组分配一块连续的内存。
多维数组
多维数组:数组里面的元素又是数组
二维数组:
数组中所有的元素都是一维数组;
多维数组:
在第二维的数组元素中可以继续是数组,在PHP中没有维度限制
但是不建议使用超过三维以上的数组,会增加访问的复杂度,降低访问效率
异形数组(不规则数组):
数组中的元素不规则,有普通变量,也有数组
在实际开发过程中,不常使用,尽量让数组元素规则化,便于访问。
数组遍历
通常普通数组数据的访问都是通过数组元素的下标实现访问,如果说数组中所有的数据都需要依次输出出来,就需要使用一些简化的规则来实现自动获取下标以及输出数组元素。
访问一维元素:$arr[一维下标];
访问二维元素:$arr[一维下标][二维下标];
Foreach遍历语法:
基本语法:
foreach($数组变量名 as [$下标 =>]$值){
//通过$下标访问元素的下标;通过$值访问元素的值;
}
如果是关联数组(字母下标),foreach语法中就需要下标;如果是数字下标,就直接访问值;
<?php
$arr = array(1,2,3,4,5,6,7,8,9);
//foreach 循环
foeach($arr as $i){
//$i 可以随意命名,不影响程序
echo $v,'<br/>';
}
输出结果:
如果需要获取下标,
<?php
$arr = array(1,2,3,4,5,6,7,8,9);
foreach($arr as $k=>$i){
echo '数组中下标',$k,'的值为',$i,'<br/>';
}
输出结果为:
在进行数据存储定义的时候,通常二维数组不会两个维度的key下标都为数组,一般都是一维为数字(无意义),而二维为字符串(数据库表字段),所以在进行遍历的时候,通常是只需要针对一维进行遍历,取得二维数组元素,然后二维数组元素通过下标访问。
for循环遍历数组:
基于已知边界条件(起始和结束),然后有条件的变化。因此for循环遍历数组有对应条件
1、获取数组长度:count(数组名)得到数组元素的长度;
2、要求数组元素下标是规律的数字;
<?php
$arr1 =array(5,6,4,78,8,6,4,1);
/*for($i=0; $i<count(arr1);$i++){ //每次执行都要进行count(arr1)的计算
echo '下标',$i,'的值为',$arr1[$i],'<br/>';
*/
for($i=0,$lenght = count($arr1); $i<$lenght;$i++){ //相较于上面的代码,更加节省资源
echo '下标',$i,'的值为',$arr1[$i],'<br/>';
}
while配合each和list遍历数组
each函数:能够从一个数组中获取当前数组指针所指向元素的下标和值,拿到后将数组指针下移,同时将拿到的元素下标和值以一个四个元素的数组返回:
0下标 ---> 取得元素的下标值
1下标 ---> 取得元素的值 //索引
key下标 ---> 取得元素的下标值
value下标 ---> 取得元素的值 //关联
返回两组数组,一组是索引方式,一组是关联数组
如果each取不到值,返回false
list函数使用:list是一种结构,不是一种函数(没有返回值),是list提供一堆变量去从一个数组中取得元素值,然后依次存放到响应的变量中(批量为变量赋值,值来源于数组);
条件:list必须从索引数组中获取数据,而且必须从0开始;
配合方法:
list(变量1,变量2) = each(数组);
数组相关函数:
1、排序函数:对数组元素进行排序,按照ASCII码进行比较,可以进行英文比较(首字母)
sort():顺序排序,下标重排
rsort():逆向排序,下标重排
asort():顺序排序,保持下标不变
arsort():逆向排序,保持下标不变
ksort():按照键名(下标)顺序排序
krsort():按照键名(下标)逆向排序
shuffle():随机打乱数组元素
都是对原数组内部进行排序
指针函数
reset():重置指针,将数组指针回到首位
end():重置指针,将数组指针指到最后一个元素
next():指针向下移动一位,返回下一个元素的值
prev():指针向上移动,取得上一个元素的值
current():取得当前指针对应的元素值
key():取得当前指针对应的下标值
注意:next和prev会移动指针,有可能导致指针移动到最前或者最后(离开数组),导致数组不能使用,通过next和prev不能回到正确的指针位置。只能通过end或者reset进行指针重置。
其他函数
count():统计数组中元素的数量
array_push():往数组中加入一个元素(数组后面),会改变数组
array_pop():从数组中取走一个元素(数组后面),会改变数组
array_shift():从数组中取出一个元素(数组前面),会改变数组
arrat_unshift():对数组压入一个元素(数组前面),会改变数组
array_reverse():把数组元素反过来排序
in_array():判断元素在数组中是否存在
array_keys():获取一个数组的所有下标,返回一个索引数组
array_values():获取一个数组的所有值,返回一个索引数组