编程语言
首页 > 编程语言> > php-在foreach中使用参考(&)在输出数组中添加`&`?这是一个错误吗

php-在foreach中使用参考(&)在输出数组中添加`&`?这是一个错误吗

作者:互联网

我正在使用PHP 5.3.5,但遇到错误.我有一个数组

  $input = array( 
                0=>array(
                        'a'=>'one0',
                        'b'=>'two0',
                        'c'=>'three0',
                        'd'=>'four0',
                        'e'=>'five0'
                        ),
                1=>array(
                        'a'=>'one1',
                        'b'=>'two1',
                        'c'=>'three1',
                        'd'=>'four1',
                        'e'=>'five1'
                        )
            );

我使用array_splice从每个数组中删除初始的两个值
 通过在foreach中使用&(按引用值)

foreach ($input as $bk => &$bv) {
         $op[]=array_splice($bv,0,2);        
}

现在,当我看到$input时,它会添加&就在第二个数组之前.

var_dump($input);显示这个

array
  0 => 
    array
      'c' => string 'three0' (length=6)
      'd' => string 'four0' (length=5)
      'e' => string 'five0' (length=5)
  1 => & <====================================From where this `&` comes?
    array
      'c' => string 'three1' (length=6)
      'd' => string 'four1' (length=5)
      'e' => string 'five1' (length=5)

&在哪里来自以及如何产生这样的数组?有效吗

如果我删除&在foreach中,它没有给我想要的数组.难道我做错了什么?

解决方法:

这很违反直觉,但实际上不是错误.在循环中使用引用时,建议在循环后立即取消引用:

foreach ($input as $bk => &$bv) {
    $op[]=array_splice($bv,0,2);        
}
unset($bv);

标签:array-splice,multidimensional-array,foreach,pass-by-reference,php
来源: https://codeday.me/bug/20191201/2080134.html