Wie kann ich mit PHP eine äußere Schleife durchbrechen?

124

Ich möchte eine äußere for / foreach-Schleife in PHP durchbrechen.

Dies kann in ActionScript folgendermaßen erfolgen:

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

Was ist das PHP-Äquivalent?

Marty
quelle
7
Schauen Sie sich immer zuerst die Dokumentation an: php.net/manual/en/control-structures.break.php
Felix Kling
Ich habe 2 Lösungen gepostet, eine mit Labels, wie im Action-Skript und eine, die nur verwendetbreak
Edgar Villegas Alvarado

Antworten:

34

PHP-Handbuch sagt

break akzeptiert ein optionales numerisches Argument, das angibt, aus wie vielen verschachtelten umschließenden Strukturen herausgebrochen werden soll.

break 2;
Shakti Singh
quelle
16

Sie können nur eine break-n-Anweisung verwenden:

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

Wenn Sie in php> = 5.3 sind, können Sie Beschriftungen und gotos verwenden, ähnlich wie in ActionScript:

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

Aber gotomuss sorgfältig verwendet werden. Gehe zu ist böse (als schlechte Praxis angesehen)

Edgar Villegas Alvarado
quelle
1
Es gibt durchaus gültige Verwendungen für goto. Auch eval () ist nicht böse (und es ist). Es hat noch weniger Verwendungszwecke als goto.
Lucian303
1
Ja. Deshalb sagte ich "goto muss vorsichtig verwendet werden"
Edgar Villegas Alvarado
In dieser Notiz halte
Ruggi
12

Sie können verwenden break 2;, um aus zwei Schleifen gleichzeitig auszubrechen. Es ist nicht ganz das gleiche wie in Ihrem Beispiel mit den "benannten" Schleifen, aber es wird den Trick machen.

Jon
quelle
6
$i = new MovieClip();
foreach ($movieClipArray as $i)
{
    $nameArray = array();
    foreach ($nameArray as $n) 
        if ($i->name == $n) 
            break 2;
}
Jordan Arseno
quelle
Netter Versuch, den gesamten bereitgestellten Code in PHP zu konvertieren, obwohl die break-Anweisung nicht das tut, was ich brauche (sie beendet nur die innere Schleife).
Marty
Aktualisiere deine Seite :) Ich habe sie durch break 2 ersetzt ... was laut PHP-Handbuch: "break akzeptiert ein optionales numerisches Argument, das angibt, aus wie vielen verschachtelten umschließenden Strukturen herausgebrochen werden soll."
Jordan Arseno
4

Verwenden Sie goto?

for ($i = 0, $j = 50; $i < 100; $i++) 
{
  while ($j--) 
  {
    if ($j == 17) 
      goto end; 
  }  
}
echo "i = $i";
end:
echo 'j hit 17';
Petr Abdulin
quelle