web-dev-qa-db-fra.com

Comment utiliser un cas de commutation 'ou' dans PHP

Existe-t-il un moyen d'utiliser un opérateur "OU" ou un équivalent dans un commutateur PHP?

Par exemple, quelque chose comme ceci:

switch ($value) {

    case 1 || 2:
        echo 'the value is either 1 or 2';
        break;
}
210
alex
switch ($value)
{
    case 1:
    case 2:
        echo "the value is either 1 or 2.";
    break;
}

C'est ce qu'on appelle "tomber à travers" le bloc de cas. Le terme existe dans la plupart des langues implémentant une instruction switch.

475
user19302

Si vous devez utiliser || avec switch, alors vous pouvez essayer:

$v = 1;
switch (true) {
    case ($v == 1 || $v == 2):
        echo 'the value is either 1 or 2';
        break;
}

Sinon, votre solution préférée aurait été

switch($v) {
    case 1:
    case 2:
        echo "the value is either 1 or 2";
        break;
}

Le problème est que les deux méthodes ne sont pas efficaces pour traiter de grands cas ... imaginez 1 à 100 cela fonctionnerait parfaitement

$r1 = range(1, 100);
$r2 = range(100, 200);
$v = 76;
switch (true) {
    case in_array($v, $r1) :
        echo 'the value is in range 1 to 100';
        break;
    case in_array($v, $r2) :
        echo 'the value is in range 100 to 200';
        break;
}
130
Baba

Je ne republierai pas les autres réponses car elles sont toutes correctes, mais j'ajouterai simplement que vous ne pouvez pas utiliser switch pour des instructions plus "compliquées", par exemple: pour tester si une valeur est "supérieure à 3", " entre 4 et 6 ", etc. Si vous avez besoin de faire quelque chose comme ça, utilisez plutôt les instructions if, ou s'il y a un besoin particulièrement fort de switch, vous pouvez l'utiliser de nouveau:

switch (true) {
    case ($value > 3) :
        // value is greater than 3
    break;
    case ($value >= 4 && $value <= 6) :
        // value is between 4 and 6
    break;
}

mais comme je l'ai dit, j'utiliserais personnellement une déclaration if.

54
nickf

Essayez avec ces exemples suivants dans cet article: http://phpswitch.com/

Cas de commutation possibles:

(je). Une instruction switch simple

La déclaration de commutateur est merveilleuse et magique. C'est un élément du langage qui vous permet de sélectionner différentes options pour une valeur et d'exécuter différents éléments de code en fonction de la valeur définie.

Chaque option possible est donnée par un cas dans l'instruction switch.

Exemple:

switch($bar)
{
    case 4:
        echo "This is not the number you're looking for.\n";
        $foo = 92;
}

(ii). Délimitation des blocs de code

Le principal inconvénient de switch est que chaque cas sera traité dans le suivant, sauf si vous l'arrêtez avec pause. Si le cas simple ci-dessus est étendu au cas 5:

Exemple:

case 4:
    echo "This is not the number you're looking for.\n";
    $foo = 92;
    break;

case 5:
    echo "A copy of Ringworld is on its way to you!\n";
    $foo = 34;
    break;

(iii). Utilisation de l'option fallthrough pour plusieurs cas

Parce que switch continuera à exécuter du code jusqu'à ce qu'il trouve une rupture, il est assez facile de prendre le concept de fallthrough et d'exécuter le même code pour plusieurs cas

Exemple:

cas 2:

case 3:
case 4:
    echo "This is not the number you're looking for.\n";
    $foo = 92;
    break;

case 5:
    echo "A copy of Ringworld is on its way to you!\n";
    $foo = 34;
    break;

(iv). Commutation avancée: Cas de condition

Le commutateur PHP ne vous permet pas seulement d'activer la valeur d'une variable particulière: vous pouvez utiliser n'importe quelle expression comme cas, à condition qu'elle donne une valeur à utiliser pour le cas. A titre d'exemple, voici un simple validateur écrit en utilisant switch:

Exemple:

switch(true)
{
    case (strlen($foo) > 30):
        $error = "The value provided is too long.";
    $valid = false;
    break;

    case (!preg_match('/^[A-Z0-9]+$/i', $foo)):
        $error = "The value must be alphanumeric.";
    $valid = false;
    break;

    default:
    $valid = true;
    break;
}

je pense que cela peut vous aider à résoudre votre problème.

36
John Peter

Essayer

switch($value) {
    case 1:
    case 2:
        echo "the value is either 1 or 2";
        break;
}
15
Craig

Je vous suggère de passer http://php.net/manual/en/control-structures.switch.php (manuel)

switch ($your_variable)
{
    case 1:
    case 2:
        echo "the value is either 1 or 2.";
    break;
}

explication

Comme pour la valeur que vous voulez exécuter une instruction unique, vous pouvez la mettre sans interruption, car si ou si une interruption est trouvée, elle continuera à exécuter le code et si elle est trouvée, elle sortira du boîtier de commutation.

9
Abhishek Jaiswal
switch ($value) 
{
   case 1:
   case 2:
      echo 'the value is either 1 or 2';
   break;
}
1
Tapas Pal

utilisez ce code:

switch($a) {
case 1:
case 2:
    .......
    .......
    .......
    break;
}

le bloc a appelé à la fois 1 et 2.

1
RaJeSh