59 votes

PHP change la casse de plus d'une valeur dans la casse

J'ai une variable qui contient les valeurs "Hebdomadaire", "Mensuel", "Trimestriel" et "Annuel", et j'ai une autre variable qui contient les valeurs de 1 à 10.

 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.
}

Ce n'est pas beau, car 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?

138voto

Hannes Points 4246

Le moyen le plus simple et probablement le meilleur en termes de performances serait :

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

Aussi, possible 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 défini et ne peut pas être nul ou 0

12voto

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

Tout ce qui se trouve après le premier cas correspondant sera exécuté jusqu'à ce qu'une instruction break soit trouvée. Cela passe donc au cas suivant, ce qui vous permet de « regrouper » les cas.

4voto

Nixon Kosgei Points 79

Si vous lisez ceci et que l'année est 2021 et au-delà, vous utilisez également PHP > 8.0, vous pouvez maintenant utiliser la nouvelle expression de correspondance pour cela.

cela pourrait être

 $var3 = match($var2){
    1,2 => 'Weekly',
    3 => 'Monthly',
    4,5 => 'Quarterly'
};

en savoir plus sur l'expression de correspondance ici

1voto

Soccerwidow Points 33

Switch est également très pratique pour les tests A/B . Voici le code pour tester au hasard quatre 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;

0voto

Ian Hollender Points 1

Vous pouvez utiliser array pour stocker vos groupes de correspondance ; Comme:

     <?php
    $names = array('Ian', 'Jack', 'Fred', 'Ismail');
    $name = 'Vladimir';
    switch ($name) {
    case (in_array($name, $names)):
            echo '<p> Welcome ' . $name . '</p>';
            break;
        default:
            echo '<p>' . $name . ' is a stranger to me?</p>';
    }
?>

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