2014-10-17 66 views
3

我是PHP新手,在線看到下面的代碼。它有continue 2break一起在switch/case聲明。這是什麼意思?繼續2並打開switch語句

foreach ($elements as &$element) { 

    switch ($element['type']) { 
     case a : 
      if (condition1) 
       continue 2; 
      break; 

     case b : 
      if (condition2) 
       continue 2; 
      break; 
    } 

    // remaining code here, inside loop but outside switch statement 
} 

回答

6

PHP.net:continue

繼續接受一個可選的數字參數來告訴它應該多少 水平封閉循環跳到結束。缺省值 的值爲1,因此跳到當前循環的末尾。

PHP.net:switch

如果在循環中有一個switch並希望繼續到下一個 迭代外環的,使用2繼續

PHP繼續執行語句,直到交換機 塊的結尾,或第一次它看到一個突破聲明。如果您在案例陳述清單末尾沒有寫入 中斷陳述,則執行以下案例的陳述時,PHP將執行 。

說明:continue 2跳轉到環路的在2個水平恢復的下一次迭代,這是foreachbreak(相當於break 1)結束當前循環,即switch

英文:對於每個$element,如果類型是「a」和condition1被滿足或如果類型是「b」和condition2被滿足,繼續到下一個$element和忽略的開關選項的其餘部分。否則,請繼續執行下一個開關選項,或者如果這是最後一個開關選項,請在開關後執行任何代碼。

Here's a demonstration.
對不起,viper-7.com似乎是下降暫且。

+0

謝謝你的回答。所以,你的意思是,如果類型是「a」並滿足條件1,或者如果類型是「b」並滿足條件2,那麼外部switch語句中的其餘代碼將不會被執行,並將跳轉到下一次迭代循環,對嗎? – 2014-10-17 18:35:53

+0

是的,沒錯。 'continue 2'直接跳到'foreach'循環的下一次迭代,而不執行'switch'後面的任何代碼。 [這裏有一個演示。](http://viper-7.com/4SkL9L) – showdev 2014-10-17 18:57:17

+0

得到它。感謝您的親切解釋。 – 2014-10-17 19:06:15

1

恕我直言,不同的是,如果你在開關之後和循環結束之前有代碼。

foreach ($elements as &$element) { 
     switch ($element['type']) { 
      case a : 
       if (condition1) 
        continue 2; 
       break; 

      case b : 
       if (condition2) 
        continue 2; 
       break; 
     } 
     // The code here will be reached if break but not if continue 2 
    } 
0

繼續和休息是類似的,在這將停止發生的事情。

如果繼續,它會停止大括號後面的任何內容,但不會停止循環。 switch語句剛剛脫離這個語句並繼續下一個語句。

如果發生中斷,它將停止整個循環繼續,結束循環。