在php中重置for循环的指针

Fab*_*zio 3 php for-loop

给出以下代码

<?php
$a = array(1,2,3,4,5,6);
$c=0;
foreach($a as $v){
    if($v==5&&$c==0){
        $c=1;
        reset($a);
    }
    var_dump($v);
}
Run Code Online (Sandbox Code Playgroud)

如何重置指针以便打印1,2,3,4,5,1,2,3,4,5,6?

我知道在这种情况下我可以简单地说

<?php
$a = array(1,2,3,4,5,6);
$c=0;
for($i=0;$i<count($a);++$i){
    $v = $a[$i];
    if($v==5&&$c==0){
        $c=1;
        $i=-1;  //because of the loop ++$i
    }
    var_dump($v);
}
Run Code Online (Sandbox Code Playgroud)

但是我有一个更复杂的代码片段,解决方案并不像重写循环那样简单(不是数字键).

任何PHP大师都可以帮助我吗?

Kev*_*son 6

记录如下:

注意:当foreach首次开始执行时,内部数组指针会自动重置为数组的第一个元素.这意味着您不需要在foreach循环之前调用reset().

由于foreach依赖于内部数组指针,因此在循环内更改它可能会导致意外行为.

http://php.net/manual/en/control-structures.foreach.php

不知道"意外行为"是什么,因为我从来没有尝试过这个......但是手动使用每个()可能更安全......在你的代码中也更加清晰.

reset($a);
while(list($key, $val) = each($a)) {
    if($val==5&&$c==0){
        $c=1;
        reset($a);
    }
    var_dump($val);
}
Run Code Online (Sandbox Code Playgroud)

Foreach问题解释

我以为我以前见过你不能依赖foreach中的内部指针......但这次在文档中找不到它......只是"意外的结果".但是,感谢评论者,我发现以前的文本是在foreach中:

除非引用了数组,否则foreach 将对指定数组的副本进行操作,而不是数组本身.foreach对数组指针有一些副作用.在foreach期间或之后不要依赖数组指针而不重置它."

http://php.net/manual/en/control-structures.foreach.php#114759