Как я могу разорвать внешний цикл с PHP?


Я ищу, чтобы сломать внешний цикл 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 100

6 ответов:

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

break 2;

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

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

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

break 2;

вы можете использовать только оператор 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 :

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

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

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

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

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