中級 › foreachで&を使った後、unsetを忘れると値が壊れる › パターン3
foreachで&を使った後、unsetを忘れると値が壊れる
foreach ($arr as &$v) で配列を参照渡しで回すと、ループ終了後も$vは配列の最後の要素への参照を保持し続けます。
1 <?php 2 $prices = [100, 200, 300]; 3 foreach ($prices as &$p) { 4 $p -= 10; 5 } 6 _______________ ^ 7 foreach ($prices as $p) { 8 echo $p . " "; 9 } 10 echo "\n" . implode(",", $prices);
出力: 90 190 190
90,190,190期待: 90,190,290 (エラーにはなりません)
空欄を埋めて実行を通す
unset($p)を忘れると、参照が残ったままの$pに2回目のforeachの値が書き込まれ続け、最後の要素が壊れます。
次の問題