php比较运算符'小于'(>)在负数中使用,在这个switch语句中还包括0?

时间:2011-08-19 11:36:19

标签: php switch-statement

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

但是现在,当bad为0时,类$thumbs_number也会被输出(-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;
        }
    ?>
  ">

发生了什么事?

2 个答案:

答案 0 :(得分:9)

您滥用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";
}

答案 1 :(得分:2)

我遇到了类似的问题,我不愿意写一个长的if-else if块。寻找答案让我this page

使用这种技术,您只需要替换

switch ($thumbs_number)

switch (true)

Here是我的代码版本: