PHP的数组遍历

2025-10-26 18:22:11

1、1.foreach( $数组变量名   as  【$键变量key => 】 $值变量value){

//这是循环体,其中,该结构会将该数组的每一个单元(项),按顺序依次取得

//并将单元的下标赋值给键变量key,将单元的值赋值给值变量value

}

遍历原理

对于php来说,每一个数组中,都有一个“内置的”指针,通常它指向这个数组的某个单元,图示如下:

举例:

$arr  =  array( 12,  5,  ‘aa’=>8,  6=>10,  ‘bb’=> 3,  4);

PHP的数组遍历

2、2.指针是可以人为移动的——通过系统函数;

有如下一些函数可以进行“指针操作”:

$v1 = next( $arr );  //将数组的指针移动到“下一个单元”,并取得这个新位置(新单元)上的值

$v2 = prev( $arr );  //将数组的指针移动到“上一个单元”,并取得这个新位置(新单元)上的值

$v3 = current( $arr ); //直接取得数组的指针所在位置的单元的值;

$v4 = key( $arr );  //直接取得数组的指针所在位置的单元的键(下标);

$v5 = reset( $arr );  //将数组的指针移动到“第一个单元”,并取得第一个单元的值。就是恢复数组

$v6 = end( $arr );  //将数组的指针移动到“最后一个单元”,并取得最后一个单元的值

遍历流程图:

PHP的数组遍历

3、3.while + each + list遍历数组

each()函数的使用:

each()函数可以(先)取得一个数组的“当前单元”的键和值,并(再)将该数组的指针移动到下一个单元

举例:

$arr  =  array( 12,  ‘aa’=>8,  6=>10,  ‘bb’=> 3,  4);

$a = each( $arr );  //这里,取得了数组$arr的第一个单元的键(0),和值(12),

//结果,$a是一个数组,其中有 4 项!因为取得的2个数据,做了“双份存储”

//一份是索引数组,下标0为取得键(0),下标1为取得的值(12)

//另一份是关联数组,下标key为取得键(0),下标value为取得的值(12)

举例:

PHP的数组遍历

4、4.list()的使用:

举例:

$arr1 = array( 11,  12,  13 );

list($v1, $v2, $v3 ) = $arr1;  //这是一个奇怪的语法,其作用(含义)跟下述3行语句一样:

$v1 = $arr1[0]; //11

$v2 = $arr1[1]; //12

$v3 = $arr1[2]; //13

可见:list()语法结构,其实就是相当于一次性给多个变量赋值,而且依次将这些变量的值都赋予一个数组的从0开始的连续的整数单元的值;

继续:

list($s1, $s2) = $arr1; //结果,分别取得11,12

还有更灵活的:

list($m1,  , $m2) = $arr1; //结果分别取得11, 13,即跳过了$arr[1]的取值

再来一个例子:

$arr2 = array( 2=>11,  3=>12,  ‘aa’=>18,  1=>13,  ‘bb’=>28,  0=>14 );

list($n1, $n2, $n3, $4)  = $arr2;  //分别取得:14, 13, 11,  12

//可见:取值时,不管数组中的单元的下标顺序,以及字符下标也不受影响,而是照此规则进行:

//第1个变量取得下标为0的单元的值;

//第2个变量取得下标为1的单元的值;

//第3个变量取得下标为2的单元的值;

..........

使用while+each + list来实现数组的通用遍历:

PHP的数组遍历

5、5.foreach遍历的细节

foreach也是正常的循环语法结构,可以有break和continue等操作。

遍历过程中值变量默认的传值方式是值传递。

遍历过程中值变量可以人为设定为引用传递:foreach($arr as $key => &$value){ ... },注意:键变量不可以这样做。

foreach默认是原数组上进行遍历。但如果在遍历内部对数组进行了某种修改或某种指针性操作,则会复制数组后在复制的数组上继续遍历循环。

foreach中如果值变量是引用传递,则无论如何都是在原数组上进行。

PHP的数组遍历

PHP的数组遍历

6、6.foreach遍历的细节

PHP的数组遍历

PHP的数组遍历

PHP的数组遍历

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢