一道有趣的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题目》
2017-02-07
编程语言
评论