foreach循环是不是能够处理PHP中的引用?

时间:2015-09-02 15:44:31

标签: php foreach

我刚刚注意到你无法处理foreach循环中的引用。拿这个代码示例:

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


    foreach($arr as $a) {
        $foo[] = &$a;
    }

    var_dump($foo);

令人惊讶的是,输出为array(5) { [0]=> &int(5) [1]=> &int(5) [2]=> &int(5) [3]=> &int(5) [4]=> &int(5) }

但是,我期待$arr的副本。我只能一个

   for($i = 0; $i < count($arr); $i++) {
      $foo[] = &$arr[$i];
   }

   var_dump($foo);

输出:array(5) { [0]=> &int(1) [1]=> &int(2) [2]=> &int(3) [3]=> &int(4) [4]=> &int(5) }

为什么这种行为是可取的?

1 个答案:

答案 0 :(得分:2)

临时变量$a会更改每次迭代,直到它最终等于5,因此对它的引用为5.这将为您提供所需的行为:

foreach($arr as &$a) {
    $foo[] = &$a;
}

这会将$a引用到实际的数组值。