$a = [1,2,3];
foreach($a as &$item){
echo $item . ',';
}
//unset($item); // 引用赋值后不销毁对象
foreach($a as $item){
echo $item . ',';
}
上面的代码的输出如下:
1,2,3,1,2,2
(网上的答案: 看最后一个输出的是2,而不是3,就是因为代码里没有销毁$item造成的,原因如下:第一个循环,把3的引用赋给了$item,第二个循环,把1赋给了$item,因为$item是引用,导致数组的元素3变成了1,明白了吗?)
看的不太明白,求大神 详细解答,谢谢!!!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
答案
php是没有块级作用域的!!!
也就是说,第一个循环结束后,
$item依然指向数组的第三个成员。之后每次循环,就把数组的第一个值写到第三个成员,然后是第二个值写个第三个成员,然后是第二个值写个第三个成员,但此时第三个值已经被上次修改成2了,所以这次第三个值会被修改成2.
证明
这里。我们将这个代码修改一下,加点调试信息
上述程序输出结果为
你看明白了吗?