$animals = array('cat', 'dog', 'horse', 'elephant');
foreach($animals as $animal)
{
   var_dump($animal);
   next($animals);
}
The code above outputs: cat, dog, horse, elephant. I thought the next function should move the internal pointer of $animals and, thus, I should be getting this output instead: cat, horse.
How do I make the internal pointer of $animals move forward (and backwards) such that it is affected in the foreach?
EDIT 1:
From the manual:
As foreach relies on the internal array pointer changing it within the loop may lead to unexpected behavior.
Nonetheless, I think this is what I need to do.
EDIT 2:
Per "Your Common Sense"'s link, I will provide a more detailed explanation of my problem. Here's some psuedo code:
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
When execution returns to the start of the loop, it should continue from the last array accessed by #3. Note that the array is associative, thus a for ($i = 0 ... approach won't work.
You can just create an ArrayIteratorDocs  which is seekableDocs.
As it is an iterator, you can change the position while you iterate over it, some rudimentary example:
foreach ($iterator as $current) {
    $iterator->next();
}
It should offer everything you need out of the box. If not, you could encapsulate your needs into an IteratorDocs on your own as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With