PHP foreach数组循环的一些问题

来源:互联网 发布:曹睿是谁的孩子 知乎 编辑:程序博客网 时间:2024/05/20 11:52

点击打开链接打开官方手册对foreach的介绍


 <?php/*PHP foreach() 语法结构用于遍历操作或输出数组,foreach() 仅能用于遍历数组或对象,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。 语法:*/foreach (array as $value)statement// 或者:foreach (array as $key => $value)statement/*上述语法中,每次循环将当前单元的值赋给 $value 并且数组内部的指针向前移一步。在第二种语法格式中还将当前单元的键名也会在每次循环中赋给变量 $key。 通常循环访问数组都用for循环,例如:*/ for($i = 0; $i < 3; $i++){echo $arr[$i];}//但通过手工代码操作一个大数组来说,用foreach循环的代码更少,上面的代码可以这样写: foreach ($arr as $value){echo $value;}//下面来仔细探讨下foreach使用中的一些问题。 1.foreach 中使用引用的情况。//普通情况下,foreach($arr as $value)中的$arr和$value是拷贝,不受外部影响的,即 $arr = array(0,1,2,3,4,5); foreach($arr as $value){$arr = array();echo $value;} // 12345//但如果$arr是引用的话,情况则不同了,我们用代码来说明问题 $arr = array(0,1,2,3,4,5);$arr = &$arr;foreach($arr as $value){$arr = array();echo $value;}// 0/*这是因为循环用的$arr是直接指向原数据的,而不是copy了一份。 如果$value是引用,而$arr不是引用,其结果是一样的,同样$value是指向原数据的而不是copy。*/ $arr = array(0,1,2,3,4,5);foreach($arr as &$value){$arr = array();echo $value;}// 结果是: 0//还有一种情况比较特殊,即是如果定义了$arr为全局变量的话,$arr也会变成引用: global $arr;$arr = array(0,1,2,3,4,5);foreach($arr as $value){$arr = array();echo $value;}// 结果是: 0//2. 如果两次循环一个数组,一定不能这样写 foreach($arr as &$value){}foreach($arr as $value){} //这会导致第二次的循环的结果不正确。可以用以下几种来代替: view sourceprint?//solution 1foreach($arr as &$value){}unset($value);foreach($arr as $value){}//solution 2foreach($arr as &$value){}foreach($arr as &$value){}//solution 3foreach($arr as &$value){}$arr2 = $arr;foreach($arr2 as $value){}//3.防止foreach出现未定义情况,尽量这样来写foreach  foreach((array)$arr as $value) {}?>


21 0
原创粉丝点击