前言
本篇文章简要叙述了PHP中数组的使用,主要包括数组(数字索引数组,关联数组,多维数组)的创建,访问以及数组的一些其他常用函数。
数组的分类
在C语言中常见的数组叫做数字索引数组,PHP中还有关联数组,也就是说数组的索引可以是一个字符串,这样更有利于表现数组中元素值的意义。
如:
$person = array();
$person['name'] = 'Tom';
$person['age'] = 18;
当数组的元素值还是数组时,就构成了多维数组。
不过还是要着重注意PHP中数字索引数组的特点:
1.数组元素值可以混搭,也就是数组本身没有一个确定的数据类型。
2.数组可以不按照数字索引顺序赋值,但是求数字大小时是其真实大小而非最高索引加一。
数组的创建
数字索引数组的创建
$example = array('1','Tom',2);
当然除了初始化还有其他创建数组的方法,比如:
$example = array();
$example[0] = '1';
$example[1] = 'Tom';
$example[2] = 2;
关联数组的创建
$person = array('name'=>'Tom','age'=>18);
也可以使用赋值的方式创建该关联数组:
$person = array();
$person['name'] = 'Tom';
$person['age'] = 18;
多维数组的创建
这个也没有什么好说的,知道了上面两种数组的创建后多维数组的创建也很简单了。
$multi = array( array(1,2,3),
array(2,3,4),
array('a','b'));
数组的访问
我将从访问单个数组元素与数组遍历两个方面来记录数组的访问方法。
访问单个数组元素
基本的访问方式
所谓基本的访问方式,即直接通过索引进行访问,此处不再细说。
借助数组指针进行访问
在PHP数组中有一个内置的指针指向当前元素,可以借助这个指针进行访问。
如下为对该指针进行控制的几个函数。
- each():返回以当前指针所指键值对为值的数组,至于键是什么,自行var_dump查看;同时将当前指针移至后一个有效位置。若当前指针在最后一个有效位置后面,返回false。
- current():返回当前指针所指键值对的值,不移动指针。
- reset():重新将数组指针置于头部。
- end():将数组指针置于尾部。
- next():先将指针移至下一有效位置,再返回其值。若当前位置已经是最后的有效位置,返回false。
- pos():current()的别名。
- prev():和next()类似但是是相反的,它向前移动一个有效位置并返回其值,若前面无更多有效位置返回false。
注:
- each()返回数组,而current/pos,next,prev返回值。
- 我所说的下一个有效位置是指下一个被赋予有效值的位置,并不一定就是下一个紧邻的位置,因为PHP中允许间隔地对数组赋值。
- 上述函数对数字索引数组和关联数组均有效,只是数字索引数组的键始终是数字,而关联数组的可以是数字或字符(串)。
对数组的遍历访问
理解了对单个数组元素的访问,遍历访问就容易理解了。
对数字索引数组的遍历访问
有如下几种常用的方式:
$arr = array('a','b','1');
//type 1
for($i = 0;$i < count($arr);$i++){
echo $arr[$i].' ';
}
reset($arr);
//type 2
foreach($arr as $currrent){
echo $current.' ';
}
reset($arr);
//type 3
while($ele = each($arr)){
echo $ele['value'].' ';
}
对关联数组的遍历访问
通常有两种方式:
$arr = array('name'=>'Tom','age'=>18);
//type 1
foreach($arr as $key => $value){
echo $key.' '.$value.'</br>';
}
reset($arr);
//type 2
while($ele = each($arr)){
echo $ele['key'].' '.$ele['value'].'</br>';
}
数组的排序
对一维数组的排序
首先说对一维数字索引数组的排序。使用sort函数即可。
bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
第一个参数为要排序的数组,第二个为对排序行为进行控制的可选参数。
该函数将数组按照从小到大的顺序排序。
再说关联数组的排序,有两种方式,按照键排序和按照值排序,分别为ksort与asort。
bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
上述均为按照从小到大的排序,使用rsort,arsort,krsort可以实现反向的由大到小的排序。
对多维数组的排序
对多维数组进行排序时,使用usort函数进行操作。
bool usort ( array &$array , callable $value_compare_func )
其中第一个参数为要排序的多维数组,第二个参数为排序时的回调函数。
该回调函数有两个值,假设分别为$var1,$var2,这两个值即为进行大小判断时传入的两个数组元素(也为数组)。若该回调函数的返回值为0,则两数组大小相等;若小于0,则左($var1)小右大;若大于0,则左大右小。
将数组重新排序
- 使用shuffle函数可将当前数组的顺序随意打乱。
- 使用array_reverse函数可将数组顺序反转。(注意:该函数返回一个新数组,不影响原数组。)
其他常用的数组函数
- array_push:将新元素添加到数组末尾。
- array_pop:将数组末尾元素删除并返回。
- range:在一定范围内创建一个数组。
- array_walk:对数组中每一项执行某一操作。
- count/sizeof:计算数组大小。
- array_count_values:统计每一个数组元素的频率。
- extract:将数组中的键值对转换为标量。