258 votes

Comment utiliser un interrupteur "ou" en PHP ?

Existe-t-il (en PHP en tout cas) un opérateur OR dans un cas de commutation ?

quelque chose comme

switch ($value) {

case 1 || 2:
echo 'the value is either 1 or 2';
break;

}

557voto

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

C'est ce qu'on appelle "passer à travers" le bloc de cas et cela existe dans la plupart des langages qui implémentent une instruction switch.

147voto

Baba Points 49157

Si vous devez utiliser || con 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 lorsqu'il s'agit de traiter de grands cas ... imaginer. 1 a 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;
}

58voto

nickf Points 185423

Je ne vais pas répéter 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 if ou s'il y a un besoin particulièrement fort de switch alors il est possible de l'utiliser à l'envers :

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 if cette déclaration.

40voto

John Peter Points 1558

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

Cas possibles d'interrupteurs :

(i). Une simple instruction de commutation

L'instruction switch est merveilleuse et magique. C'est un élément du langage qui vous permet de choisir entre différentes options pour une valeur, et d'exécuter différents morceaux de code en fonction de la valeur définie.

Chaque option possible est indiqué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

L'inconvénient majeur de switch est que chaque cas se poursuivra dans le cas suivant, à moins que vous ne l'arrêtiez avec break. 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 du repli pour des cas multiples

Étant donné que switch continuera à exécuter le code jusqu'à ce qu'il trouve une faille, il est assez facile de reprendre le concept de fallthrough et d'exécuter le même code dans 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 switch de PHP ne permet pas seulement de basculer sur la valeur d'une variable particulière : vous pouvez utiliser n'importe quelle expression comme l'un des cas, tant qu'elle donne une valeur à utiliser pour le cas. A titre d'exemple, voici un validateur simple é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.

15voto

Craig Points 15049

Essayez

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X