php比较运算符';小于';负数中使用的(>;)也包括此switch语句中的0


php comparison operators 'is less than' (>) used in negative numbers is also including 0 in this switch statement?

这是switch语句。只有当变量$thumbs_number小于-1(例如-2、-3、-4等(时,才应输出类bad

但现在,当$thumbs_number为0时,类bad也在输出(-1和1具有正确的类:average(。

<div class="topic-like-count
    <?php // Apply style based on number of votes
        switch ($thumbs_number) {
            case ($thumbs_number < -1): echo ' bad'; break;
            case ($thumbs_number == 0):
            case ($thumbs_number == 1): echo ' average'; break;
            case ($thumbs_number == 2):
            case ($thumbs_number == 3): echo ' good'; break;
            case ($thumbs_number == 4):
            case ($thumbs_number == 5): echo ' great'; break;
            case ($thumbs_number == 6):
            case ($thumbs_number == 7): echo ' excellent'; break;
            case ($thumbs_number > 7): echo ' brilliant'; break;
        }
    ?>
  ">

发生了什么?

您滥用了switch语句。

每个case语句将表达式的结果与传递给switch的值进行比较。因此,在这里您将$thumbs_number($thumbs_number < -1)的结果进行比较,即truefalse

改为:

switch ($thumbs_number) {
    case 0:
    case 1:
        echo "average";
        break;
    case 2:
    case 3:
        echo "good";
        break;
    ....
    default:
        if ($thumbs_number <= -1) echo "bad";
        else if ($thumbs_number > 7) echo "brillant";
}

我遇到了类似的问题,我不愿意写一个长的if-else-if块。为了寻找答案,我来到了这一页。

有了这种技术,你所需要做的就是更换

switch ($thumbs_number)

带有

switch (true)

这是我的代码版本: