• 展开微博窗口
  • QQ:52619941
  • 微信:cnmemory
  • 展开分类目录
  • 还没有账号?

Memory

一道有趣的PHP题目

在网上看见一道题目,觉得挺有意思。


$arr = [1, 2, 3];
//第一次遍历
foreach($arr as &$val) {}
//第二次遍历
foreach($arr as $val) {}
//输出什么?
var_dump($arr);

最终的结果输出了:


array(3) {
  [0] =>
  int(1)
  [1] =>
  int(2)
  [2] =>
  int(2)
}

两次遍历中并没有对数组进行任何的操作,为什么会这样输出1,2,2而不是1,2,3呢?
原因就是在第一次遍历时用的是&val引用赋值,而在foreach完之后,这个$val依然存在,是$arr[2]元素的引用
当进入到第二次遍历时,在遍历到第一个元素时$val被赋值为1,即$arr[2] = 1, 遍历到第二个元素时$arr[2] = 2,
遍历到第3个元素时$arr[2] = $arr[2],所以最后的结果就成了1,2,2。

如果用到引用赋值,foreach完后建议unset($val),这一点手册上也有提及,但并没有非常强调。

码字很辛苦,转载请注明来自雨林寒舍《一道有趣的PHP题目》

评论

  1. kaxi #1

    :sad:

    回复
    2017-02-26