2011-05-04 40 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