PHP switch case more than one value in the case
Solution 1
The simplest and probably the best way performance-wise would be:
switch ($var2) {
case 1:
case 2:
$var3 = 'Weekly';
break;
case 3:
$var3 = 'Monthly';
break;
case 4:
case 5:
$var3 = 'Quarterly';
break;
}
Also, possible for more complex situations:
switch ($var2) {
case ($var2 == 1 || $var2 == 2):
$var3 = 'Weekly';
break;
case 3:
$var3 = 'Monthly';
break;
case ($var2 == 4 || $var2 == 5):
$var3 = 'Quarterly';
break;
}
In this scenario, $var2 must be set and can not be null or 0
Solution 2
switch ($var2) {
case 1 :
case 2 :
$var3 = 'Weekly';
break;
case 3 :
$var3 = 'Monthly';
break;
case 4 :
case 5 :
$var3 = 'Quarterly';
break;
}
Everything after the first matching case will be executed until a break statement is found. So it just falls through to the next case, which allows you to "group" cases.
Solution 3
If You're reading this and the year is 2021 and beyond, You're also using PHP > 8.0, you can now use the new match expression for this.
this could be
$var3 = match($var2){
1, 2 => 'Weekly',
3 => 'Monthly',
4, 5 => 'Quarterly',
default => 'Annually',
};
Please note that match does identity checks, this is the same as ===
compared to switch equality check which is ==
.
read more about match expression here
Solution 4
Switch is also very handy for A/B testing. Here is the code for randomly testing four different versions of something:
$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;
Alex Pliutau
Updated on July 09, 2022Comments
-
Alex Pliutau almost 2 years
I have a variable that holds the values 'Weekly', 'Monthly', 'Quarterly', and 'Annual', and I have another variable that holds the values from 1 to 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. }
It isn't beautiful, because my code has a lot of duplicates. What I want:
switch ($var2) { case 1, 2: $var3 = 'Weekly'; break; case 3: $var3 = 'Monthly'; break; case 4, 5: $var3 = 'Quarterly'; break; }
How can I do it in PHP?
-
Gromski over 13 years
($var2 == 1 || $var2 == 2)
may not work correctly depending on what$var2
is. If$var2 = 0
the first case will be executed. It's also a lot more verbose than the plaincase
style. You're alsobreaking
a little too often. -
Hannes over 13 years@deceze, agreed, thats why i put the other solution first, its just an example for "complex" boolean comparison
-
Gromski over 13 yearsIf you were to use this style at all, at least do it correctly by making the condition work correctly:
switch (true) { case ($a || $b) : ... }
-
Hannes over 13 years@deceze if were to do that then
case 3
would no longer work, but i will ad a note -
Alex Pliutau over 10 yearsCongratulate you with your first answer! But it's offtop :)