代码如下
<?php
$arr = [1,2,3];
foreach($arr as &$value) {
}
foreach($arr as $value) {
print_r($arr);
}
输出结果
Array
(
[0] => 1
[1] => 2
[2] => 1
)
Array
(
[0] => 1
[1] => 2
[2] => 2
)
Array
(
[0] => 1
[1] => 2
[2] => 2
)
原因
第一个循环 $value 使用了引用
第一次循环时
v
a
l
u
e
是
value 是
value是arr[0]的引用
第二次循环时
v
a
l
u
e
是
value 是
value是arr[1]的引用
第二次循环时
v
a
l
u
e
是
value 是
value是arr[2]的引用
第二个循环
v
a
l
u
e
没
有
被
u
n
s
e
t
掉
它
还
是
value 没有被unset掉 它还是
value没有被unset掉它还是arr[2]的引用
第一次循环时 $arr[2] = $arr[0] = 1
第二次循环时 $arr[2] = $arr[1] = 2
第二次循环时 $arr[2] = $arr[2] = 2
温馨提示
使用foreach 引用时为了不必要的麻烦 建议使用unset掉引用的变量