Using the (&) link in foreach, add `&` to the output array? this is mistake

I am using PHP 5.3.5 and I am stuck in error. I have an array

  $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'
                        )
            );

I use array_spliceto remove the initial two values ​​from each array using &(value by reference) in foreach

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

Now, when I see it $input, it adds &just before the second array.

var_dump($input); shows it

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)

Where &and how does it create such an array? It's really?

If I delete &in foreach, this does not give me the desired array. Am I doing something wrong?

+3
source share
1 answer

, . , :

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

All Articles