3

我正在使用 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'
                        )
            );

我使用foreach 中的 (value by reference)array_splice从每个数组中删除初始两个值&

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

现在,当我看到$inputthen 它&在第二个数组之前添加了一个。

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 中删除&,它不会给我想要的数组。难道我做错了什么?

4

1 回答 1

3

这很违反直觉,但实际上并不是一个错误。在循环中使用引用时,建议您在循环之后立即取消设置引用:

foreach ($input as $bk => &$bv) {
    $op[]=array_splice($bv,0,2);        
}
unset($bv);
于 2012-05-10T10:20:12.497 回答