2009-12-07 4 views
1

J'ai un peu de mal à comprendre ce bug. Voici le code:Continuer à ne pas démarrer en boucle

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; 
    } 

Ce que je suis en train de faire ici est de filtrer certaines valeurs du tableau donnent (dans ce cas, il sera le $_POST) qui commence par le nom donné ($dash), mais Je veux filtrer ceux qui sont 'id', 'module', 'action', 'configure' ou 'to_pdf'.

Donc, ce que je pensais travailler serait un 'continuer'. Puisque l'instruction switch n'est pas une boucle, 'continue' devrait aller au début de la boucle (foreach), mais apparemment cela ne se produit pas. Je reçois toujours les noms clés que je ne veux pas dans le tableau.

J'ai trouvé une solution, en changeant un peu le code, mais je voudrais vraiment comprendre pourquoi cela ne fonctionne pas.

Le 'continuer' devrait me renvoyer à la foreach !!

Répondre

4

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

continue est utilisée dans les structures en boucle pour passer le reste de l'itération de boucle de courant [...]
Note: Notez que PHP l'instruction switch est considérée comme une structure en boucle aux fins de continuer.
+0

Bon sang, trop rapide pour moi: D +1 –

+0

L'ordre de tri aléatoire ne résout pas tout à fait le « problème » pour trouver des réponses rapidement upvoted, encore; - – VolkerK

+0

:(Et j'ai lu le manuel lol et raté ce nota. – AntonioCS

3

Vous devez utiliser continuer à 2 à la place:

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; 
    } 
Questions connexes