Comment utiliser un commutateur switch 'ou' en PHP

230

Existe-t-il un moyen d'utiliser un opérateur «OU» ou é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;
}
Peter Mortensen
la source

Réponses:

505
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. Le terme existe dans la plupart des langues implémentant une instruction switch.

Communauté
la source
135

Si vous devez utiliser ||avec, switchvous 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éthode n'est pas efficace lorsqu'il s'agit de grands cas ... imaginez 1à 100cela 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;
}
Baba
la source
58

Je ne publierai 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, tenez-vous en à l'utilisation des ifinstructions, ou s'il y a un besoin particulièrement fort switchalors il est possible de l'utiliser à l'avant:

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 ifdéclaration là-bas.

nickf
la source
1
Heureux de voir que vous avez recommandé if () sur switch () dans ce cas. Ce type de commutateur ajoute juste de la complexité, OMI.
moo
1
oui, il faudrait avoir une raison assez convaincante pour choisir ce style, mais il est bon de savoir que c'est possible.
nickf
2
Je suis vraiment content d'avoir appris cela. Chaque fois que je construis un projet dans un langage Basic-y, je manque d'avoir un style C switch(), et quand je travaille dans un langage C-ish ça me manque vraiment d'avoir Select Case, ce qui est vraiment une façon abrégée de dire "il y a un grand bloc de if, else if, else-if ... ici ".
Stan Rogers
5
you can't use switch for more "complicated" statementsest-ce can'tou est-ce shouldn't? parce que dans votre exemple, vouscan
Sharky
@Sharky, il voulait dire que le cas d'utilisation ordinaire du commutateur ne peut pas. ce genre de switch (true)chose n'est pas un cas d'utilisation ordinaire du commutateur.
Chen Li Yong du
37

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

Cas de commutation possibles:

(je). Une simple déclaration de changement

L'instruction switch est merveilleuse et magique. C'est un morceau 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 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

La mise en garde majeure du commutateur est que chaque cas se poursuivra dans le suivant, sauf si vous l'arrêtez avec une 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 Fallthrough pour plusieurs cas

Étant donné que le commutateur continuera d'exécuter du code jusqu'à ce qu'il trouve une interruption, il est assez facile de prendre le concept de fallthrough et d'exécuter le même code pour plus d'un 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 de PHP ne vous permet pas seulement d'activer la valeur d'une variable particulière: vous pouvez utiliser n'importe quelle expression comme l'un des cas, tant qu'il donne une valeur pour le cas à utiliser. À 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.

John Peter
la source
Avez-vous un cas d'utilisation réel pour l'exemple (iv)?
Pedro Moreira
15

Essayer

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

Je vous suggère de parcourir 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, vous pouvez le mettre sans interruption comme jusqu'à ce que ou à moins que break ne soit trouvé, il continuera à exécuter le code et si break est trouvé, il sortira du boîtier de commutation.

Abhishek Jaiswal
la source
1

utilisez ce code:

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

le bloc appelait à la fois 1 et 2.

RaJeSh
la source
1
switch ($value) 
{
   case 1:
   case 2:
      echo 'the value is either 1 or 2';
   break;
}
Tapas Pal
la source
0

http://php.net/manual/en/control-structures.switch.php Exemple

$today = date("D");

    switch($today){

        case "Mon":

        case "Tue":

            echo "Today is Tuesday or Monday. Buy some food.";

            break;

        case "Wed":

            echo "Today is Wednesday. Visit a doctor.";

            break;

        case "Thu":

            echo "Today is Thursday. Repair your car.";

            break;

        default:

            echo "No information available for that day.";

            break;

    }
Md Nazrul Islam
la source
-4

La meilleure façon pourrait être sinon de demander. En outre, cela peut être plus facile et clair à utiliser.

Exemple:

<?php 
$go = $_REQUEST['go'];
?>
<?php if ($go == 'general_information'){?>
<div>
echo "hello";
}?>

Au lieu d'utiliser les fonctions qui ne fonctionnent pas bien avec PHP, surtout lorsque vous avez PHP en HTML.

ahmed
la source