Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Switch doesn't work with numeric comparison cases

Tags:

php

Here is my code.

$value = 0;
switch($value) {
      case ( $value <= 25 ):
            $CompScore = 'low';
            break;
      case ($value > 25 && $value <= 50 ):
            $CompScore = 'fair';
            break;
      case ($value > 50 && $value <= 75 ):
            $CompScore = 'good';
            break;
      case ($value >75 ):
            $CompScore = 'excellent';
            break;
      default:
            $CompScore = 'low';
            break;
}

echo $CompScore;

When the value is 0, $compScore is fair. Why it is not showing low? I don't understand why.

like image 836
Science Avatar asked Jun 28 '26 02:06

Science


1 Answers

switch not working like that.

Since $value is 0 which is falsy value.

$value <= 25 is true, $value > 25 && $value <= 50 is false, so $CompScore will be 'fair'.

For you code, use an if elseif else flow will be more readable.

You could rewrite your code like below:

// from excellent to low
if ($value > 75) {
  $CompScore = 'excellent';
} else if ($value > 50) {
  $CompScore = 'good';
} else if ($value > 25) {
  $CompScore = 'fair';
} else {
  $CompScore = 'low';
}
like image 106
xdazz Avatar answered Jun 30 '26 17:06

xdazz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!