foreach で値を参照で受け取った場合は、配列を壊さないようにunset()するべき。

下記のように、foreach で参照で値を受け取って配列の値を加工する場合に、最後にunset()しないと、配列を破壊する場合があります。

//下記のunset($val)をしないと、$list[2] への参照が $val に残っていて$valに値を入れると、$list[2]の値が下記かわってしまう
unset($val);  

要注意ですね。
(変数の持ち回しがよくないとか、参照で処理するのはコストがかかるのでしないほうがいい、とかいう意見もありそうですが、もしやるならunset()も必須でという感じです。)

最初に現象が出た時には、なんなんだこの動きは?って思いましたが納得です。

コメントは受け付けていません。