2011-05-04 39 views
94

我正在寻找打破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

总是先看看文档:http://php.net/manual/en/control-structures.break.php – 2011-05-04 08:14:59

+0

我已经发布了2个解决方案,一个与标签,如在行动脚本和其他只是使用'break' – 2011-05-04 08:22:54

回答

12

您可以使用break 2;同时打破两个循环。这与你的“命名”循环的例子并不完全一样,但它会起到诀窍的作用。

27

PHP Manual

休息接受一个可选的数字 参数,它告诉了很多 嵌套封闭结构是如何被 爆发的。

break 2; 
3

使用goto?

for($i=0,$j=50; $i<100; $i++) 
{ 
    while($j--) 
    { 
    if($j==17) 
     goto end; 
    } 
} 
echo "i = $i"; 
end: 
echo 'j hit 17'; 
6
$i = new MovieClip(); 
    foreach($movieClipArray as $i) 
    { 
      $nameArray = array(); 
      foreach($nameArray as $n) if($i->name==$n) break 2; 
    } 
+0

很好的尝试将整个提供的代码转换为PHP,虽然break语句没有做我需要它做什么(它只会结束内部循环)。 – Marty 2011-05-04 08:18:45

+0

刷新你的页面:)我用_break 2_替换......根据PHP手册:“break接受一个可选的数字参数,告诉它有多少嵌套的封闭结构将被分解出来。” – 2011-05-04 08:22:29

11

您可以只用一个突破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。转到邪恶(认为不好的做法)

+1

有相当有效的用途去。即使eval()也不是邪恶的(而且是)。它比goto的用途更少。 – lucian303 2013-05-31 19:14:09

+1

是的。这就是为什么我说“goto一定要谨慎使用” – 2013-08-29 08:05:43

+0

在该笔记中,我相信这个页面是相关的:http://php.net/manual/en/control-structures.goto.php – Ruggi 2016-05-19 14:14:01