foreach()の中で配列ポインタを動かしたいと思ったものの


prev(),next()のような配列の内部ポインタを操作する関数を使い、
foreachループの中で再度繰り返しやスキップなどをさせたい
(スキップはcontinueでもOKだけど)

しかし


foreach は内部の配列ポインタに依存するので、 ループ内で配列ポインタを変更すると予期せぬ振る舞いを引き起こします。

だと。
実際、foreachの第一引数で与えられる変数は、foreach内で直接操作されていないっぽい。


Note: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. foreach has some side effects on the array pointer. Don't rely on the array pointer during or after the foreach without resetting it.


というわけで、現状foreachで内部ポインタの操作をするのは諦めるしかない

foreach($data as $key => $val){
    if($error)
       prev($data);  // doesn't work correctly
}
↓↓↓↓

while(list($key,$val) = each($data)){
    if($error)
       prev($data);
}

while()で対応する。