给出以下代码
<?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大师都可以帮助我吗?
记录如下:
注意:当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