Re: Rewind foreach loop

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux