Вопрос по break, php, for-loop – Использовать Goto?

108

у разорвать внешний цикл 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?

Всегда сначала смотрите документацию:php.net/manual/en/control-structures.break.php Felix Kling
Я опубликовал 2 решения, одно с ярлыками, как в сценарии действия, а другое просто используетbreak Edgar Villegas Alvarado

Ваш Ответ

6   ответов
4

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

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

Руководство по PHP говорит

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

break 2;
238

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

break 2;

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

это идет наcontinue 2просто для большей информации =) Arash Moosapour
12

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

6
    $i = new MovieClip();
    foreach($movieClipArray as $i)
    {
          $nameArray = array();
          foreach($nameArray as $n) if($i->name==$n) break 2;
    }
Хорошая попытка конвертировать весь предоставленный код в PHP, хотя оператор break не делает то, что мне нужно (он только завершает внутренний цикл). Marty
обновить страницу :) я заменил наперерыв 2 ... который в соответствии с PHP Manual: «break принимает необязательный числовой аргумент, который сообщает ему, сколько вложенных вложенных структур нужно вырвать». Jordan Arseno
14

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

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

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

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

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

В этой заметке я считаю, что эта страница актуальна:php.net/manual/en/control-structures.goto.php Ruggi
Да. Вот почему я сказал: «Гото нужно использовать осторожно» Edgar Villegas Alvarado
Есть вполне допустимые варианты использования goto. Даже eval () не является злом (и оно есть). Он имеет даже меньше пользы, чем goto. lucian303

Похожие вопросы