下記のように、foreach で参照で値を受け取って配列の値を加工する場合に、最後にunset()しないと、配列を破壊する場合があります。
1 2 3 4 |
$list = array(1,2,3); foreach($list as &$val){ $val = $val+1; } |
//下記のunset($val)をしないと、$list[2] への参照が $val に残っていて$valに値を入れると、$list[2]の値が下記かわってしまう
unset($val);
要注意ですね。
(変数の持ち回しがよくないとか、参照で処理するのはコストがかかるのでしないほうがいい、とかいう意見もありそうですが、もしやるならunset()も必須でという感じです。)
最初に現象が出た時には、なんなんだこの動きは?って思いましたが納得です。