2009-09-05 6 views
3

Si "voiture" ou "ferrari" en entrée, il faut imprimer "voiture ou ferrari". Comment puis-je y arriver?PHP: deux valeurs dans le cas de Switch?

<?php 
$car ='333'; 
switch($car) 
{ 

     case car OR ferrari: 
       print("car or ferrari"); 
       break; 
     case cat: 
       print("cat"); 
       break; 
     default: 
       print("default"); 
       break; 
} 
?> 

Répondre

22

Utilisez deux case clauses:

case 'car': 
case 'ferrari': 
    print("car or ferrari"); 
    break; 

Le explanation:

Il est important pour comprendre comment l'instruction switch est exécutée afin d'éviter les erreurs. L'instruction switch exécute ligne par ligne (en réalité, instruction par instruction). Au début, aucun code n'est exécuté. Ce n'est que lorsqu'une instruction case est trouvée avec une valeur qui correspond à la valeur de l'expression switch que PHP commence à exécuter les instructions. PHP continue à exécuter les instructions jusqu'à la fin du bloc switch ou la première fois qu'il voit une instruction break. Si vous n'écrivez pas une instruction break à la fin de la liste des instructions d'un dossier, PHP continuera à exécuter les instructions du cas suivant.

+0

+1 et accepté parce que vous avez ciblé la critique. Je vous remercie. – hhh

+0

Intéressant de noter que le cas 'default:' est comme n'importe quel autre cas. Il n'a pas besoin d'être à la fin de l'interrupteur. Exemple: http://codepad.org/jNrQdM3U – iDev247

2
switch($car) 
{ 

     case car: 
     case ferrari: 
       print("car or ferrari"); 
       break; 
     case cat: 
       print("cat"); 
       break; 
     default: 
       print("default"); 
       break; 
} 

cas "chute par" jusqu'à ce que la première déclaration break. Cela signifie également que vous n'avez pas besoin de break dans le cas default.

5

Vous pouvez simplement "tomber dans" les cas que vous voulez gérer aussi:

<?php 
    $auto ='333'; 
    switch($auto) 
    { 

    case car: 
    case ferrari: 
      print("car or ferrari"); 
      break; 
    case kissa: 
      print("cat"); 
      break; 
    default: 
      print("default"); 
      break; 
    } 
+0

Comment répondez-vous à la critique du beau Gun? – hhh

+0

Désolé, je pourrais être trop en retard, mais je ne peux pas trouver la critique de handsomeGun? –

1
switch($car) { 
case 'car': 
case 'ferrari': 
    print("car or ferrari"); 
    break; 
case 'cat': 
    print("cat"); 
    break; 
default: 
    print("default"); 
    break; 
} 

Cela profite de la propriété 'fall-through' de la déclaration switch(). Fondamentalement, une section ne s'arrête pas à un case, elle s'arrête à break (ou toute autre opération qui quitte la fonction).

J'ai pris la liberté d'appliquer l'empreinte que je préfère pour les interrupteurs, ce qui les rend utilisent seulement jusqu'à un niveau de retrait, que je considère approprié parce que, logiquement, l'switch et son cases sont tous les éléments de la même construction. Par conséquent, l'utilisation de deux niveaux de retrait au sein du switch ne fournit aucune information utile.

1

Je ne » savoir si PHP supporte cela, mais en C, vous pourriez faire quelque chose comme ceci:

case car: 
case ferrari: 
      print("car or ferrari"); 
      break; 

L'idée est que le code pour traiter le cas de la voiture va continuer à courir jusqu'à ce qu'il touche une instruction break. Quant au style, il devrait être évité.

+0

+1 pour commencer la comparaison – hhh

Questions connexes