PHPのforeachは値を参照で渡すことができるが、ループ後の処理を適切に行わないと落とし穴にはまる。
具体的にはループを抜けた後に、ブロック内で用いていた変数をunsetしてやらなければならない。
foreach ($array as &$value) { // 処理 } unset($value);
上記の例でもし$valueのunsetを忘れると、$valueは配列の最後の要素の参照を保持し続けるため、同じ変数名に値をセットした場合、元配列の最後の要素がその値に書き換わってしまう。
ということで、見落としがちだけど超重要。