2009-12-07 70 views
1

我有一點麻煩了解這個bug。 下面是代碼:繼續不會循環開始

function filter_optionsfordash(array $data,$dash) { 
    $filtered_options = array(); 
    $len = strlen($dash);  
    foreach ($data as $k => $value) { 
     if (substr($k,0,$len) === $dash) { 
     $option_name = trim(str_replace($dash . '_','',$k)); 

     switch ($option_name) { 
      case 'displayColumns': 
      $value = explode(',',$value); 
      break; 

      case 'dashletTitle': 
      $option_name = 'title'; 
      break; 

      case 'id': 
      case 'module': 
      case 'action': 
      case 'configure': 
      case 'to_pdf': 
      continue; 
      break; 
     } 


     $filtered_options[$option_name] = $value;   
     } 
    }  

    return $filtered_options; 
    } 

我想在這裏做的是從給定陣列過濾一些值(在這種情況下,這將是$_POST)與給定的名稱($dash)開始,但我想過濾掉'id','module','action','configure'或'to_pdf'。

所以,我想會的工作是「繼續」。由於switch語句不是循環,因此'continue'應該到循環的開頭(foreach),但顯然這不會發生。我仍然獲得陣列中不想要的鍵名。

我已經找到了解決方案,通過改變碼了一點,但我真的想明白爲什麼這是行不通的。

「繼續」應該送我回的foreach!

回答

4

http://docs.php.net/continue說:

繼續進行內循環結構用來跳過本次循環的其餘[...]
注:注意在PHP中switch語句被認爲是一種循環結構繼續。
+0

媽的,太快對我來說:d +1 – 2009-12-07 16:02:49

+0

隨機排序順序並不完全解決「問題」快速upvoted答案,但; - ) – VolkerK 2009-12-07 16:12:36

+0

:(我讀了手冊大聲笑,錯過了nota。謝謝 – AntonioCS 2009-12-07 16:25:35

3

您需要繼續使用,而不是2:

function filter_optionsfordash(array $data,$dash) { 
    $filtered_options = array(); 
    $len = strlen($dash);  
    foreach ($data as $k => $value) { 
     if (substr($k,0,$len) === $dash) { 
     $option_name = trim(str_replace($dash . '_','',$k)); 

     switch ($option_name) { 
      case 'displayColumns': 
      $value = explode(',',$value); 
      break; 

      case 'dashletTitle': 
      $option_name = 'title'; 
      break; 

      case 'id': 
      case 'module': 
      case 'action': 
      case 'configure': 
      case 'to_pdf': 
      continue 2; 
      break; 
     } 


     $filtered_options[$option_name] = $value;   
     } 
    }  

    return $filtered_options; 
    }