为什么倒数第二个值复制到数组的最后一个值

时间:2019-08-22 08:17:00

标签: php foreach reference unset

我是初学者。我在阅读Php.net手册,发现那里有关于foreach循环的示例。我已尽力理解为什么倒数第二个值会被复制到最后一个值,但仍然没有任何线索。请详细回答。

<?php

$arr = array(1, 2, 3, 4);

foreach($arr as &$value) {
    $value = $value * 2;
}

// $arr is now array(2, 4, 6, 8)

// without an unset($value), $value is still a reference to the last item: $arr[3]

foreach($arr as $key => $value) {
    // $arr[3] will be updated with each value from $arr...
    echo "{$key} => {$value} ";
    print_r($arr);
}

// ...until ultimately the second-to-last value is copied onto the last value

// output:
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
?>

1 个答案:

答案 0 :(得分:0)

对不起,我的英语不好,但这不是我的母语。 这是因为您的第二个foreach不会重新初始化$ value,因此它仍然是参考。 如果您使用var_dump数组,则会看到以下内容:

array(4) {
  [0]=>   
  int(2)  
  [1]=>   
  int(4)  
  [2]=>   
  int(6)  
  [3]=>   
  &int(8) 
}

您的最后一个值是一个引用,因此它将采用$ value的值。在第一次迭代中为2,在第二次迭代中为4 ...最后一次是它自己,最后一次值为6。