Как я могу разорвать внешний цикл с помощью PHP? - PullRequest
116 голосов
/ 04 мая 2011

Я хочу разорвать внешний цикл for / foreach в PHP.

Это можно сделать в ActionScript следующим образом:

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

Что такое эквивалент в PHP?

Ответы [ 6 ]

255 голосов
/ 04 мая 2011

В случае 2-х вложенных циклов:

break 2;

http://php.net/manual/en/control-structures.break.php

32 голосов
/ 04 мая 2011

PHP Manual говорит

break принимает необязательный числовой аргумент, который сообщает ему, сколько вложенных вложенных структур должно быть разорвано.

break 2;
15 голосов
/ 04 мая 2011

Вы можете использовать только оператор break-n:

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

Если вы в php> = 5.3, вы можете использовать метки и goto s, как в скрипте действия:

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

Но goto нужно использовать осторожно. Гото это зло (считается плохой практикой)

12 голосов
/ 04 мая 2011

Вы можете использовать break 2;, чтобы разорвать две петли одновременно.Это не совсем то же самое, что ваш пример с «именованными» циклами, но это поможет.

6 голосов
/ 04 мая 2011
    $i = new MovieClip();
    foreach($movieClipArray as $i)
    {
          $nameArray = array();
          foreach($nameArray as $n) if($i->name==$n) break 2;
    }
4 голосов
/ 04 мая 2011

Использовать goto?

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