第一个循环: 将$arr = array(1, 2, 3, 4) 的元素逐一引用传递给$value 再经过 $value *= 2的赋值 $arr数组元素同时被改变 循环结束时 $value的内存地址和$arr[3]是一致的
第二个循环: 将新的$arr = array(2, 4, 6, 8) 的元素逐一值传递给$value 此时由于$value的内存地址与$arr[3]一致 所以经过 $value *= 2 实际改写了 $arr[3]的值 所以$arr[3] 依次变化 4=>8=>12=>24 如果还不能明白 可以看一下以下代码的运行结果
复制内容到剪贴板
代码:
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
print_r($arr);
echo '<hr />','<hr />';
foreach ($arr as $value) {
$value = $value * 2;
print_r($arr);
echo '<hr />';
}