PHP关于foreach函数的坑

9个月前 阅读 145 评论 0 赞 0

foreach是PHP非常好用的一个方法.在使用当中有时候也会遇到一些意想不到的BUG
例如:

  1. $arr = array(1,2,3,4,5);
  2. foreach($arr as &$value){
  3. $value = $value * 2;
  4. echo $value;
  5. }
  6. foreach($arr as $value){
  7. echo $value;
  8. }

第一个循环输出的是:246810
第二个循环输出的是:24688
这是为什么呢?
我的理解是:
因为在第一个foreach并不会产生一个块级作用域,因此$value是一个全局变量
而在迭代中,每一次都会更新对$arr数组的引用,迭代结束后,$value指向了$arr最后一个元素即$arr[4]

在第二个foreach中
1,arr[0]赋值给value,这时arr[4] = 2
2,arr[1]赋值给value,这时arr[4] = 4
3,arr[2]赋值给value,这时arr[4] = 6
4,arr[3]赋值给value,这时arr[4] = 8
5,arr[4]赋值给value,这时arr[4] = 8

要想避免这个坑,在第一次foreach后unset($value)销毁这个引用即可.

你的支持将鼓励作者继续创作

评论(0)

(无)