如何使用PHP中断外部循环?


124

我希望打破PHP中的外部for / foreach循环。

可以在ActionScript中完成,如下所示:

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

PHP的等效项是什么?



我已经发布了2个解决方案,其中一个带有标签,例如在动作脚本中使用,其他仅使用break
Edgar Villegas Alvarado

Answers:




16

您可以只使用break-n语句:

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

如果您使用的是PHP> = 5.3,则可以使用标签和gotos,类似于ActionScript:

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

但是goto必须小心使用。后藤是邪恶的(被认为是不良做法)


1
goto有相当有效的用途。甚至eval()都不是邪恶的(而且是邪恶的)。它的用途比goto少。
lucian303

1
是。这就是为什么我说“必须谨慎使用goto”的原因
Edgar Villegas Alvarado

在该注释中,我认为该页面是相关的:php.net/manual/en/control-structures.goto.php
Ruggi

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语句并没有执行我需要的操作(它只结束了内部循环)。
马蒂

刷新您的页面:)我用break 2替换了... ...根据PHP手册,它是:“ break接受一个可选的数字参数,告诉它要分解出多少个嵌套的封闭结构。”
Jordan Arseno

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';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.