Donc, j'ai quatre conditions à remplir et j'ai pensé qu'il serait préférable d'utiliser l'instruction switch
en PHP. Cependant, je dois vérifier si un entier est, disons, inférieur ou égal, ou supérieur et égal.
switch ($count) {
case 20:
$priority = 'low';
break;
case 40:
$priority = 'medium';
break;
case 60:
$priority = 'high';
break;
case 80:
$priority = 'severe';
break;
}
Avec une instruction if()
, cela ressemblerait à ceci:
if ($count <= 20) {
$priority = 'low';
}
if ($count <= 40) {
$priority = 'medium';
}
Est-ce possible dans switch-case
?
Un cas plus général pour résoudre ce problème est:
switch (true) {
case $count <= 20:
$priority = 'low';
break;
case $count <= 40:
$priority = 'medium';
break;
case $count <= 60:
$priority = 'high';
break;
default:
$priority = 'severe';
break;
}
Les commutateurs ne peuvent pas faire cela, mais dans ce cas particulier, vous pouvez faire quelque chose comme ceci:
switch ((int)(($count - 1) / 20)) {
case 0:
$priority = 'low';
break;
case 1:
$priority = 'medium';
break;
case 2:
$priority = 'high';
break;
case 3:
$priority = 'severe';
break;
}
Ainsi, dans (int)(($count - 1) / 20)
, toutes les valeurs comprises entre 0 et 20 seront évaluées à 0, 21 à 40 seront évaluées à 1, etc., ce qui vous permettra d’utiliser l’instruction switch à cette fin.
Et puisque nous concaténons des valeurs, nous pouvons même simplifier un tableau:
$priorities = ['low', 'medium', 'high', 'severe'];
$priority = $priorities[(int)(($count - 1) / 20)];
Il y a une manière qui fonctionne dans php 7 en utilisant des opérateurs d’assignation ternaires. L'opérateur a été introduit plus tôt (5.4?) Mais je n'ai jamais testé le code sur d'autres versions. J'ai écrit l'intégralité du code de commutateur là , cependant, par souci de brièveté, voici juste l'article spécifique. Disons que nous voulons que la condition corresponde pour tous les nombres supérieurs ou égaux à cinq:
switch($value){
case ($value >= 5?$value:!$value)://do something here
break;
}
Soit nous laissons la valeur $ inchangée, soit nous la nions en fonction de la condition. Une valeur $ correspondra toujours ou échouera au test contre sa négation.
Les instructions switch()
servent à effectuer plusieurs tests d'égalité. Ils sont fondamentalement juste une version légèrement plus facile à lire (mais aussi plus dangereuse) de
if (x == 'a') { ... }
else if (x == 'b') { ... }
else if (x == 'c') { ... }
code. Il n'y a aucun moyen de changer une switch()
de ==
en <
ou tout autre opérateur de comparaison. C'est strictement pour le test d'égalité.