参照による配列の反復には注意してください

要素を参照して配列を反復処理するときに、非常に不愉快なPHP機能(&を使用した各構成)を見つけました。

自分で見てください:
$test = array('1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5); print_r($test); foreach ($test as $key => $value) { echo "{$key} => {$value}\n"; } 


期待したものが得られます。
 Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 ) 1 => 1 2 => 2 3 => 3 4 => 4 5 => 5 


ただし、参照によって反復を追加する価値があります。
 $test = array('1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5); foreach ($test AS &$value) { // - .        } print_r($test); foreach ($test as $key => $value) { echo "{$key} => {$value}\n"; } 


...予期しない結果を得る方法:
 Array ( [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 ) 1 => 1 2 => 2 3 => 3 4 => 4 5 => <b>4</b> 


私はわき柱が何であるかを完全には理解していません、それは何らかの形で最初のループを出た後の最後の要素へのリンクが$ valueにあるという事実に関連しています。 この動作を回避するには、2つの方法があります。2番目のループも参照で繰り返すか、$値の代わりに別の名前を使用する必要があります。

Source: https://habr.com/ru/post/J59299/


All Articles