0 в случае переключателя?

Извините за, возможно, немой вопрос, но у меня есть ОГРОМНАЯ проблема с одним случаем, когда у меня есть некоторая международная переменная со значением 0 (нуль).

            switch ($starost_vozila){
                case (0):
                    switch ($podaci['tip_motora']){
                        case ("motor1"):
                            $eko_taksa = 485;
                        break;
                        case ("motor2"):
                            $eko_taksa = 243;
                        break;
                        case ("motor3"):
                            $eko_taksa = 121;
                        break;
                        case ("motor4"):
                            $eko_taksa = 194;
                        break;
                    }
                break;
                case ($starost_vozila < 6):
                    switch ($podaci['tip_motora']){
                        case ("motor1"):
                            $eko_taksa = 485;
                        break;
                        case ("motor2"):
                            $eko_taksa = 243;
                        break;
                        case ("motor3"):
                            $eko_taksa = 121;
                        break;
                        case ("motor4"):
                            $eko_taksa = 194;
                        break;
                    }
                break;
                case ($starost_vozila > 5 && $starost_vozila < 11):
                    switch ($podaci['tip_motora']){
                        case ("motor1"):
                            $eko_taksa = 667;
                        break;
                        case ("motor2"):
                            $eko_taksa = 273;
                        break;
                        case ("motor3"):
                            $eko_taksa = 136;
                        break;
                        case ("motor4"):
                            $eko_taksa = 218;
                        break;
                    }
                break;

Переключатель продолжается больше, но вот моя проблема в этой части кода.

Если я не помещаю "случай (0)": и используйте это:

case ($starost_vozila >= 0 && $starost_vozila < 6):

Затем случай, который является следующим, так или иначе станет активным, и он распечатает тот "$eko_taksa = 667";.

Это - вся проблема, когда "$starost_vozila = 0", но когда это - любое число менее затем 6, чем этот случай выше работ.

Каждый var здесь является интервалом. Все работает хорошо кроме тех случаев, когда "$starost_vozila = 0" и когда я использую "случай ($starost_vozila> = 0 && $starost_vozila <6)":.

Я понятия не имею, что продолжается... Oo

Извините, если это - немой вопрос.:(

8
задан Gavrisimo 13 February 2010 в 22:11
поделиться

3 ответа

случаи переключения не принимают операторы, которые необходимо оценивать. Они берут простые строки, логические значения или числа для сравнения с

, так что, скажем, у вас есть

$x = 0

switch( $x ) {
    case( $x < 10 ):
    ...
    break;
}

, вы ожидаете, что этот случай будет запущен, но это не так, и вот почему

($ x <10) оценивает to true , так что на самом деле у вас есть:

$x = 0

switch( $x ) {
    case true: //!!!
    ...
    break;
}

0! = true , поэтому случай не работает

, вам нужно использовать

if() {

} else if() {

} else {

}
8
ответ дан 5 December 2019 в 15:23
поделиться

использование Switch похоже на == в «выражении», а не на === (не проверяет тип). Только пустая строка или NULL приведет к целому числу 0 - в остальном они считаются строкой 0.

0
ответ дан 5 December 2019 в 15:23
поделиться

Вы используете переключатель ] неправильно.

Ваш код понимается так:

if ($starost_vozila == 0) {
    switch ($podaci['tip_motora']){
        case ("motor1"):
            $eko_taksa = 485;
        break;
        case ("motor2"):
            $eko_taksa = 243;
        break;
        case ("motor3"):
            $eko_taksa = 121;
        break;
        case ("motor4"):
            $eko_taksa = 194;
        break;
    }
} else if ($starost_vozila == ($starost_vozila < 6)) { //not what you want!!!
    switch ($podaci['tip_motora']){
        case ("motor1"):
            $eko_taksa = 485;
        break;
        case ("motor2"):
            $eko_taksa = 243;
        break;
        case ("motor3"):
            $eko_taksa = 121;
        break;
        case ("motor4"):
            $eko_taksa = 194;
        break;
    }
} else if ($starost_vozila == ($starost_vozila > 5 && $starost_vozila < 11)) { //not what you want!!!
    switch ($podaci['tip_motora']){
        case ("motor1"):
            $eko_taksa = 667;
        break;
        case ("motor2"):
            $eko_taksa = 273;
        break;
        case ("motor3"):
            $eko_taksa = 136;
        break;
        case ("motor4"):
            $eko_taksa = 218;
        break;
    }
}

Например, ($ starost_vozila <6) станет либо ИСТИНА , либо ЛОЖЬ . $ starost_vozila == ($ starost_vozila <6) сравнивает $ starost_vozila либо с TRUE , либо FALSE , что вам не нужно. делать.

Я предлагаю использовать if / elseif , а не переключатель в этом случае. Например:

if ($starost_vozila == 0) {
    ...
} else if ($starost_vozila < 6) {
    ...
} else if ($starost_vozila > 5 && $starost_vozila < 11) {
    ...
}
3
ответ дан 5 December 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: