知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > PHP编程

PHP foreach数组循环的一些问题

发布时间:2015-05-27 19:22:55作者:知识屋

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


  $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) {}?>


(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜