php foreachのバグというか気をつける点について
これも昔に出くわしていながらよく原因を調べずに今日また同じ問題に遭遇してしまった。
<?php $array = array(1,2,3); foreach ($array as &$v) {} foreach ($array as $v) { echo $v."\n";}
結果
1
2
2
最後3になりません。
一回目で&$vの参照が残ったままになっているため、2回目再度$vを使うとこのような現象が発生する。
例えば以下のように使った後にunsetすることで解決することが可能。
<?php $array = array(1,2,3); foreach ($array as &$v) {} unset($v); foreach ($array as $v) { echo $v."\n";}
結果
1
2
3
今後は絶対に忘れないようにしたい。