126 votes

Pouvez-vous 'sortir' d'une boucle en PHP?

J'ai une boucle qui vérifie quelque peu mon code PHP. À l'origine, cela ressemblait à quelque chose comme ça ...

 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
}
 

Cela fonctionne très bien, mais il continue à boucler malgré après une erreur ce n’est pas nécessaire. Y a-t-il un moyen d'échapper à la boucle?

221voto

TheTXI Points 24470

Vous recherchez la déclaration de rupture .

 $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";
}
 

157voto

William Holroyd Points 1769

Comme indiqué dans d'autres articles, vous pouvez utiliser le mot-clé break. Une chose à laquelle il a été fait allusion mais qui n’a pas été expliquée est que le mot clé peut prendre une valeur numérique pour indiquer à PHP le nombre de niveaux à quitter.

Par exemple, si vous avez trois boucles foreach imbriquées les unes dans les autres pour tenter de trouver une information, vous pouvez utiliser la «pause 3» pour sortir des trois boucles imbriquées. Cela fonctionnera pour les structures 'for', 'foreach', 'while', 'do-while' ou 'switch'.

 $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
 

47voto

Hans Points 539

break; quitte votre boucle.

continue; ignore tout code pour le reste de cette boucle et passe à la boucle suivante, tant que la condition est toujours vraie.

7voto

Gabriel Sosa Points 4801

utiliser la pause

3voto

user970587 Points 290
$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
foreach ($arr as $val) {
    if ($val == 'stop') {
        break;    /* You could also write 'break 1;' here. */
    }
    echo "$val<br />\n";
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X