$animals = array('cat', 'dog', 'horse', 'elephant');
foreach($animals as $animal)
{
var_dump($animal);
next($animals);
}
上面的代码输出:猫,狗,马,大象.我认为下一个函数应该移动$animals的内部指针,因此,我应该得到这个输出:cat,horse.
如何使$animals的内部指针向前(和向后)移动,以便它在foreach中受到影响?
编辑1:
从手册:
As foreach relies on the internal array pointer changing it within the
loop may lead to unexpected behavior.
尽管如此,我认为这是我需要做的.
编辑2:
根据“你的常识”的链接,我将提供更详细的解释我的问题.这是一些伪代码:
array $foos;
start loop of $foos
- do thing #1
- do thing #2
- do thing #3
- keep doing thing #3 while the current value of $foos in the loop meets a certain criteria
loop
当执行返回到循环的开始时,它应该从#3访问的最后一个数组继续.请注意,数组是关联的,因此for($i = 0 …方法不起作用.
解决方法:
你可以创建一个ArrayIterator
Docs,即seekable
Docs.
因为它是一个迭代器,你可以在迭代它时改变位置,一些基本的例子:
foreach ($iterator as $current) {
$iterator->next();
}
它应该提供你需要的所有东西.如果没有,您也可以自己将需求封装到Iterator
Docs中.