有人可以解释一下为什么这两个代码片段返回不同的值吗?
$z = [[1,2,3],[4,5,6]];
foreach($z as &$i)
{
$i[] = 6;
}
echo json_encode($z), "\n";; // prints [[1,2,3,6],[4,5,6,6]]
// VS
foreach($z = [[1,2,3],[4,5,6]] as &$i)
{
$i[] = 6;
}
echo json_encode($z), "\n"; // prints [[1,2,3],[4,5,6]]
我本来希望将 $z 分配给数组会发生在 foreach 之前,但是将分配放在 foreach 中会导致存储在 $z 中的数组不会受到附加到 $i 末尾的影响数组。
赋值表达式的值是被赋值的表达式,而不是对其赋值的变量的引用。所以你的第二个版本相当于:
$temp_z = [[1,2,3],[4,5,6]];
$z = $temp_z;
foreach ($temp_z as &$i) {
$i[] = 6;
}
所以引用的是保存文字值的临时数组,而不是
$z
中的数组。