Операторы сравнения php 'меньше чем' (>), используемые в отрицательных числах, также включают 0 в этом операторе switch? - PullRequest
1 голос
/ 19 августа 2011

Это оператор переключения.Только если переменная $thumbs_number меньше -1 (например, -2, -3, -4 и т. Д.), Класс bad должен вывести.

Но сейчас класс badтакже выводится, когда $thumbs_number равно 0 (-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 ]

9 голосов
/ 19 августа 2011

Вы неправильно используете оператор switch.

Каждый оператор case сравнивает результат выражения со значением, переданным в switch. Здесь вы сравниваете $thumbs_number с результатом ($thumbs_number < -1), который равен либо true, либо false.

Сделайте это вместо:

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";
}
2 голосов
/ 24 апреля 2013

Я столкнулся с подобной проблемой, и мне не хотелось писать длинный блок if-else if.Поиск ответа привел меня к этой странице .

С этой техникой все, что вам нужно сделать, это заменить

switch ($thumbs_number)

на

switch (true)

Здесь - моя версия кода:

...