来看一段代码
$arr = [1, 2, 3
];
foreach (
$arr as $k=>&
$v) {
$v =
$v * 2
;
}
foreach(
$arr as $v) {
echo $v,"\n"
;
}
请迅速给出结果,看看和正确答案是否一致。
正确答案是:
2
4
4
这里面的一个关键点就是,第一个循环进行完后,$v和数组有如下关系:
$arr[2] = &
$v;
进行第二个循环的时候,第一次运行相当于:
$v =
$arr[0
];
//由于$v和$arr[2]有引用关系,所以:
$arr[2] =
$arr[0]
第二次运行相当于:
$v =
$arr[1
];
//由于$v和$arr[2]有引用关系,所以:
$arr[2] =
$arr[1]
最后输出$arr[2]的值,等同于$arr[1]的值。
如何避免这种情况呢:
1、不使用引用
2、循环结束后,执行unset($v)
转载于:https://www.cnblogs.com/shamohai/p/10524431.html