如果我遍历一个数组两次,一次是按引用,然后是按值,如果我为每个循环使用相同的变量名,PHP 将覆盖数组中的最后一个值。最好通过一个例子来说明这一点:
$array = range(1,5);
foreach($array as &$element)
{
$element *= 2;
}
print_r($array);
foreach($array as $element) { }
print_r($array);
输出:
数组( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10)
数组( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 8)
请注意,我不是在寻找解决方法,而是想了解为什么会发生这种情况。另请注意,如果每个循环中的变量名不是每个都被调用,则不会发生这种情况$element
,所以我猜这与$element
仍在范围内和第一个循环结束后的引用有关。