2010-11-12 4 views
28

J'ai une autre situation. J'ai une variable qui contient les valeurs (« Weekly », « Mensuel », « trimestrielle », « annuel »), et j'ai une autre variable qui contient les valeurs de 1 à 10.PHP commutateur cas plus de 1 valeur dans le cas

switch ($var2) { 
     case 1: 
      $var3 = 'Weekly'; 
      break; 
     case 2: 
      $var3 = 'Weekly'; 
      break; 
     case 3: 
      $var3 = 'Monthly'; 
      break; 
     case 4: 
      $var3 = 'Quarterly'; 
      break; 
     case 5: 
      $var3 = 'Quarterly'; 
      break; 
     // etc. 
} 

Il n » t belle, parce que mon code a beaucoup de doublons. Ce que je veux:

switch ($var2) { 
     case 1, 2: 
      $var3 = 'Weekly'; 
      break; 
     case 3: 
      $var3 = 'Monthly'; 
      break; 
     case 4, 5: 
      $var3 = 'Quarterly'; 
      break; 
} 

Comment puis-je le faire en PHP? Merci d'avance. Désolé pour mon anglais.

Répondre

79

la plus simple et la meilleure performance de façon serait sage probablement:

switch ($var2) { 
     case 1: 
     case 2: 
      $var3 = 'Weekly'; 
      break; 
     case 3: 
      $var3 = 'Monthly'; 
      break; 
     case 4: 
     case 5: 
      $var3 = 'Quarterly'; 
      break; 
} 

aussi possibile pour des situations plus complexes:

switch ($var2) { 
    case ($var2 == 1 || $var2 == 2): 
     $var3 = 'Weekly'; 
     break; 
    case 3: 
     $var3 = 'Monthly'; 
     break; 
    case ($var2 == 4 || $var2 == 5): 
     $var3 = 'Quarterly'; 
     break; 
} 

dans ce scénario, var2 $ doit être et ne peut pas être null ou 0

+0

'(var2 $ == 1 || var2 $ == 2)' peut ne pas fonctionner correctement en fonction de ce 'var2' de $ est. Si '$ var2 = 0' le premier cas sera exécuté. C'est aussi beaucoup plus bavard que le style «case». Vous «brisez» aussi un peu trop souvent. – deceze

+0

@deceze, d'accord, c'est pourquoi je mets d'abord l'autre solution, c'est juste un exemple de comparaison booléenne "complexe" – Hannes

+1

** Si ** vous deviez utiliser ce style, faites-le au moins correctement en faisant fonctionner la condition correctement: 'switch (true) {case ($ a || $ b): ...}' – deceze

7
switch ($var2) { 
     case 1 : 
     case 2 : 
      $var3 = 'Weekly'; 
      break; 
     case 3 : 
      $var3 = 'Monthly'; 
      break; 
     case 4 : 
     case 5 : 
      $var3 = 'Quarterly'; 
      break; 
} 

Tout après le premier cas correspondant sera exécuté jusqu'à une pause déclaration est trouvée. Cela tombe donc dans le cas suivant, ce qui vous permet de «grouper» les cas.

-2

Le commutateur est également très pratique pour les tests AB. Voici le code pour tester au hasard 4 versions différentes de quelque chose:

$abctest = mt_rand(1, 1000); 
switch ($abctest) { 
    case ($abctest < 250): 
    echo "A code here"; 
    break; 
    case ($abctest < 500): 
    echo "B code here"; 
    break; 
    case ($abctest < 750): 
    echo "C code here"; 
    break; 
    default: 
    echo "D code here"; 
    break; 
+0

Félicitez-vous avec ta première réponse! Mais c'est hors-jeu :) – pltvs

+0

Et si ce n'était pas de ces chiffres codés en dur? –

+0

Je cherchais cette réponse ... merci @ soccer. – user1735921

Questions connexes