Using comparison operators in a PHP 'switch' statement
A more general case for solving this problem is:
switch (true) {
case $count <= 20:
$priority = 'low';
break;
case $count <= 40:
$priority = 'medium';
break;
case $count <= 60:
$priority = 'high';
break;
default:
$priority = 'severe';
break;
}
Switches can't do that, but in this particular case you can do something like this:
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;
}
So in (int)(($count - 1) / 20)
all values from 0 to 20 will eval to 0, 21 to 40 will eval to 1 and so on, allowing you to use the switch statement for this purpose.
And since we are concatenating values, we can even simplify to an array:
$priorities = ['low', 'medium', 'high', 'severe'];
$priority = $priorities[(int)(($count - 1) / 20)];
There is a way that works in PHP 7 using ternary assignment operators. The operator was introduced earlier on (5.4?), but I never tested the code on other versions. I wrote the whole switch code there, however for brevity here is just the specific clause. Let's say we want the condition to match for all numbers greater than or equal to five:
switch($value){
case ($value >= 5 ? $value : !$value): // Do something here
break;
}
We either allow the $value to pass unchanged or we negate the value according to the condition. A $value will always match itself or fail the test against its negation.