PHPピット之:foreach&

1500 ワード

コードは次のとおりです.
$a = array('a','b','c','d');
foreach ($a as &$item){};
print_r($a);
foreach ($a as $item){};
print_r($a);

出力結果:
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
)
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => c
)

質問:foreachは2回も何もしていませんが、そのうちの1つが&を使っていて、結果的に配列の内容が変更されました.なぜですか.
印刷詳細を出力:
$a = array('a','b','c','d');
foreach ($a as &$item){};
print_r($a);

foreach ($a as $key => $item) {
	echo "{$key} => {$item} ";
	print_r($a);
}

出力:
Array(    [0] => a    [1] => b    [2] => c    [3] => d)
0 => a Array(    [0] => a    [1] => b    [2] => c    [3] => a)
1 => b Array(    [0] => a    [1] => b    [2] => c    [3] => b)
2 => c Array(    [0] => a    [1] => b    [2] => c    [3] => c)
3 => c Array(    [0] => a    [1] => b    [2] => c    [3] => c)

原因及び修正:
$a = array('a','b','c','d');
foreach ($a as &$item){};//  $item  $a[3], 'd'
print_r($a);

//php          
//unset($item);

//foreach    0 3,           $key, value   $item, $item         $a[3]
foreach ($a as $key => $item) {//     $item  (   $a[3]  )         :a,b,c;     n   n-1    
	echo "{$key} => {$item} ";
	print_r($a);
}