On Fri, 2007-11-30 at 09:51 -0800, Jim Lucas wrote:
> Jeffery Fernandez wrote:
> > Hi all,
> > 
> > Is it possible to rewind a foreach loop? eg:
> > 
> > 
> > $numbers = array(0,1,2,3,4,5,6,7,8,9,10);
> > 
> > foreach ($numbers as $index => $value)
> > {
> >         if ($value == 5)
> >         {
> >                 prev($numbers);
> >         }
> >         echo "Value: $value" . PHP_EOL;
> > }
> > 
> > The above doesn't seem to work. In one of my scenarios, when I encounter 
> > and 
> > error in a foreach loop, I need the ability to rewind the array pointer by 
> > one. How can I achieve this?
> > 
> > regards,
> > Jeffery
> 
> No, you can't rewind the array.  Foreach makes a copy of the array, and works 
> off that copy.
> 
> You might need to look into using do...while() instead
> 
> Something thing like this should work.
> 
> 
> <?php
> 
> $row = current($your_array);  Gives you the first element in $your_array
> 
> do {
> 
> ...
> work with your $row...
> determine if their is an error
> ...
> 
>       if ( $error ) {
>               # Watch out for infinite loop....
>               # maybe have a counter that increments each time it rewinds 
> $your_array
>               #    and have it stop at 10 loops or something.
>               prev($your_array);
>       }
> } while( $row = next($your_array) );
> 
> ?>

This is dangerous use of the array functions. A problem occurs when you
have a value that evaluates to false (such as the first entry in the
example array :). In fact the only way to ensure you traverse the array
properly is to use each() since it returns an array except when no more
entries exist. Also you want to reset() the array before looping
(normally anyways).

<?php

reset( $data );
while( ($entry = each( $data )) )
{
    // ...

    if( $errorCondition )
    {
        prev( $data );
        continue;
    }

    next( $data );
}

?>

Cheers,
Rob.
-- 
...........................................................
SwarmBuy.com - http://www.swarmbuy.com

    Leveraging the buying power of the masses!
...........................................................

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to