tags:

views:

7577

answers:

4

I have a loop that is doing some error checking in my PHP code. Originally it looked something like this

foreach($results as $result) {
    if (!$condition) {
        $halt = true;
        ErrorHandler::addErrorToStack('Unexpected result.');
    }

    doSomething();
 }

if (!$halt) {
    // do what I want cos I know there was no error
}

This works all well and good, but it is still looping through despite after one error it needn't. Is there a way to escape the loop?

Thank you

+2  A: 

use break

Gabriel Sosa
+15  A: 

You are looking for the break statement.

$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
while (list(, $val) = each($arr)) {
    if ($val == 'stop') {
        break;    /* You could also write 'break 1;' here. */
    }
    echo "$val<br />\n";
}
TheTXI
make no sense use list for that, you are just adding overhead, instead that use a foreach
Gabriel Sosa
@Gabriel, it answers the question, the code sample is exactly that, a sample. You may just as well complain about the non-descriptive "$arr" array name.
paxdiablo
@Gabriel: I am posting code directly referenced in the PHP manual, and it accurately shows the usage of the break statement.
TheTXI
@Pax, for me thats subjective, each time I put an example I tried to put a real world code.
Gabriel Sosa
@Gabriel: You didn't post an example at all, and the link you gave goes to the exact same source I supplied (which is where the sample code comes from at the very top). You basically did the same thing as I did, but made it so the OP won't see the sample until after he clicks the link.
TheTXI
That *is* a weird way to loop however!
alex
+9  A: 

As stated in other posts, you can use the break keyword. One thing that was hinted at but not explained is that the keyword can take a numeric value to tell PHP how many levels to break from.

For example, if you have three foreach loops nested in each other trying to find a piece of information, you could do 'break 3' to get out of all three nested loops. This will work for the 'for', 'foreach', 'while', 'do-while', or 'switch' structures.

$person = "Rasmus Lerdorf";
$found = false;

foreach($organization as $oKey=>$department)
{
   foreach($department as $dKey=>$group)
   {
      foreach($group as $gKey=>$employee)
      {
         if ($employee['fullname'] == $person)
         {
            $found = true;
            break 3;
         }
      } // group
   } // department
} // organization
invenetix
Good point. It is explained pretty clearly in the PHP manual near the top. I don't think this was imperative for this particular question, but this is still very good to know. +1
TheTXI
+1 extra info is always useful. thank you
alex
+1 Nice. I learned something today.
DasBoot
+1 Good point! Very Clear explanation...
Mirko
+3  A: 

break; leaves your loop.

continue; skips any code for the remainder of that loop and goes on to the next loop, so long as the condition is still true.

Hans
Which condition? The containing condition block?
alex