оператор switch не будет равняться нулю? - PullRequest
1 голос
/ 14 августа 2011

У меня есть следующая функция, которая работает должным образом, за исключением случаев, когда вы используете входное значение 0. Я попытался поискать вокруг, чтобы увидеть, равно ли 0 равно NULL или я делаю что-то неправильно

Когда вводится ноль, он выводит расширенный сигнал, который больше 20. Может кто-нибудь объяснить? Спасибо

Я планирую сделать переключатель равным 0-10, 11-20, 21-30, 31-40, 41+, но для этого примера я просто использую два сценария. Спасибо

** РЕДАКТИРОВАТЬ Я хочу значения, когда его 20 :)

function strengthPlan( $data ) {

    $data = ( int ) $data;
    switch( $data ) {
        case( $data <= 19 ):
            $result = 'standard strength';
            break;
        case( $data >= 20 ):
            $result = 'advanced strength';
            break;
    }
    return $result;

}

echo strengthPlan( 0 );

Ответы [ 3 ]

12 голосов
/ 14 августа 2011

Ваша логика неверна.Операторы Switch проверяют на равенство.Ваш код проверяет, равняется ли $data TRUE или FALSE.

 case( $data < 20 ):

:

 case( TRUE ):

, поскольку 0 < 20.

Поскольку 0 не равен TRUE, а FALSE (после преобразования), запускается второй случай.

В принципе, вы не можете использовать switch case для < или > но только для ==.

4 голосов
/ 14 августа 2011

Это не так, как переключать операторы.Они сравнивают регистр с предоставленным вами значением switch.Вот что вы должны сделать вместо этого:

function strengthPlan($length) {
    return $length >= 20 ? 'advanced strength' : 'standard strength';
}

Если вы планируете использовать больше условий, используйте оператор if...elseif следующим образом:

function strengthPlan($length) {
    if     ($length <  5) return 'micro strength';
    elseif ($length < 10) return 'tiny strength';
    elseif ($length < 15) return 'small strength';
    elseif ($length < 20) return 'standard strength';
    elseif ($length < 30) return 'advanced strength';
    else                  return 'super strength!!!!!';
}

Это будет уменьшаться каждыйусловие, пока оно не достигнет числа, в котором оно находится.В качестве альтернативы, вы можете использовать своего рода стиль таблицы поиска, подобный этому:

function strengthPlan($length) {
    $plans = array(
        1            => 'super strength!!!!!',
        $length < 30 => 'advanced strength',
        $length < 20 => 'standard strength',
        $length < 15 => 'small strength',
        $length < 10 => 'tiny strength',
        $length < 5  => 'micro strength',
    );
    return $plans[1];
}

Об этом здесь шла дискуссия: http://forums.devnetwork.net/viewtopic.php?f=50&t=113253

0 голосов
/ 14 августа 2011

Использование переключателя в этом случае неверно

Используйте это

http://sandbox.phpcode.eu/g/b4053.php

<?php 
function strengthPlan( $data ) { 
    return ($data > 20) ? 'advanced strenght' : 'standard strenght'; 
} 

echo strengthPlan( 0 );
...