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