PHP 数组遍历foreach语法结构及实例
foreach()
PHPforeach()语法结构用于遍历操作或输出数组,foreach()仅能用于遍历数组或对象,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。
语法:
foreach(arrayas$value) statement //或者: foreach(arrayas$key=>$value) statement
上述语法中,每次循环将当前单元的值赋给$value并且数组内部的指针向前移一步。在第二种语法格式中还将当前单元的键名也会在每次循环中赋给变量$key。
例子:
<?php $arr_age=array("wang"=>18,"li"=>20,"zhang"=>25); foreach($arr_ageas$age){ echo$age,'<br/>'; } ?>
运行该例子输出:
18 20 25
使用数组键值
<?php $arr_age=array("wang"=>18,"li"=>20,"zhang"=>25); foreach($arr_ageas$key=>$age){ echo$key,':',$age,'<br/>'; } ?>
运行例子输出:
wang:18 li:20 zhang:25
当foreach开始执行时,数组内部的指针会自动指向第一个单元,这意味着不需要在foreach循环之前调用reset()。
foreach所操作的是指定数组的一个拷贝,而不是该数组本身。对返回的数组单元的修改也不会影响原数组(见下面例子),但foreach循环运行到结束,原数组的内部指针将指向数组的结尾。
<?php $arr_age=array("wang"=>18,"li"=>20,"zhang"=>25); foreach($arr_ageas$age){ $age=$age+10; echo$age,'<br/>'; } //输出原数组 print_r($arr_age); ?>
运行例子输出:
28 30 35 Array([wang]=>18[li]=>20[zhang]=>25)
要在foreach中修改原数组元素,可以通过引用来实现,将上面的例子更改为:
<?php $arr_age=array("wang"=>18,"li"=>20,"zhang"=>25); foreach($arr_ageas&$age){ $age=$age+10; echo$age,'<br/>'; } //输出原数组 print_r($arr_age); ?>
运行例子输出:
18 20 25 Array([wang]=>28[li]=>30[zhang]=>35)
遍历多维数组
foreach语法结构只能用于遍历一维数组,要遍历多维数组,一般是将foreach嵌套递归使用或者将原数组分割为一维数组再进行foreach遍历。
一二维数组混合的例子:
<?php $arr_age=array("wang"=>18,"li"=>20,"zhang"=>array("name"=>"小张","age"=>25)); foreach($arr_ageas$age){ if(is_array($age)){ foreach($ageas$detail){ echo$detail,'<br/>'; } }else{ echo$age,'<br/>'; } } ?>
对多维数组的遍历处理就要根据实际的数据结构而采取最合适的处理方式。
PHP数组是通过哈希表(HashTable)表实现的,因此foreach遍历数组时是依据元素添加的先后顺序来进行的。如果想按照索引大小遍历,应该使用for()循环遍历。
for()循环遍历数组
如果是操作连续键值的数组,也可以采用for()循环来遍历数组:
<?php $arr_age=array(18,20,25); $num=count($arr_age); for($i=0;$i<$num;$i++){ echo$arr_age[$i]."<br/>"; } ?>
也可以用list()和each()结合来遍历数组,但测试发现效率不如foreach()。
以上这篇PHP数组遍历foreach语法结构及实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。