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