読者です 読者をやめる 読者になる 読者になる

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

今後は絶対に忘れないようにしたい。

参考サイト
foreachの$valueを参照で受けると思わぬバグを引き起こす - ぱせらんメモ