Comment puis-je rompre une boucle externe avec PHP?


124

Je cherche à briser une boucle externe for / foreach en PHP.

Cela peut être fait dans ActionScript comme ceci:

top : for each(var i:MovieClip in movieClipArray)
{
    for each(var j:String in nameArray)
    {
        if(i.name == j) break top;
    }
}

Quel est l'équivalent PHP?


7
Jetez toujours un œil à la documentation en premier: php.net/manual/en/control-structures.break.php
— Felix Kling

J'ai publié 2 solutions, l'une avec des étiquettes, comme dans le script d'action et l'autre qui utilise justebreak
— Edgar Villegas Alvarado

Réponses:



34

Manuel PHP dit

break accepte un argument numérique optionnel qui lui indique le nombre de structures englobantes imbriquées à séparer.

break 2;

16

Vous pouvez utiliser simplement une instruction break-n:

foreach(...)
{
    foreach(...)
    {
        if (i.name == j) 
            break 2; //Breaks 2 levels, so breaks outermost foreach
    }
}

Si vous êtes dans php> = 5.3, vous pouvez utiliser des étiquettes et des gotos, similaires à ActionScript:

foreach (...)
{        
    foreach (...)
    {
        if (i.name == j) 
            goto top;
    }
}
top:

Mais gotodoit être utilisé avec précaution. Goto est mal (considéré comme une mauvaise pratique)


1
Il existe des utilisations tout à fait valables pour goto. Même eval () n'est pas mauvais (et c'est le cas). Il a encore moins d'utilisations que goto.
— lucian303

1
Oui. C'est pourquoi j'ai dit "goto doit être utilisé avec précaution"
— Edgar Villegas Alvarado

Dans cette note, je pense que cette page est pertinente: php.net/manual/en/control-structures.goto.php
— Ruggi

12

Vous pouvez utiliser break 2;pour sortir de deux boucles en même temps. Ce n'est pas tout à fait la même chose que votre exemple avec les boucles «nommées», mais cela fera l'affaire.


6
$i = new MovieClip();
foreach ($movieClipArray as $i)
{
    $nameArray = array();
    foreach ($nameArray as $n) 
        if ($i->name == $n) 
            break 2;
}

Bien essayé de convertir tout le code fourni en PHP, bien que l'instruction break ne fasse pas ce dont j'ai besoin (elle ne fait que terminer la boucle interne).
— Marty

rafraichissez votre page :) J'ai remplacé par break 2 ... qui selon PHP Manual: "break accepte un argument numérique optionnel qui lui indique le nombre de structures englobantes imbriquées dont il faut sortir."
— Jordan Arseno

4

Utilisez goto?

for ($i = 0, $j = 50; $i < 100; $i++) 
{
  while ($j--) 
  {
    if ($j == 17) 
      goto end; 
  }  
}
echo "i = $i";
end:
echo 'j hit 17';
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.