Извините за, возможно, немой вопрос, но у меня есть ОГРОМНАЯ проблема с одним случаем, когда у меня есть некоторая международная переменная со значением 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
Извините, если это - немой вопрос.:(
случаи переключения не принимают операторы, которые необходимо оценивать. Они берут простые строки, логические значения или числа для сравнения с
, так что, скажем, у вас есть
$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 {
}
использование Switch похоже на == в «выражении», а не на === (не проверяет тип). Только пустая строка или NULL приведет к целому числу 0 - в остальном они считаются строкой 0.
Вы используете переключатель
] неправильно.
Ваш код понимается так:
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) {
...
}