对不起可能是愚蠢的问题,但是当我有一些值为0(零)的int变量时,我遇到了一个巨大的问题。
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;
切换继续更多,但这是我的问题,在这段代码中。
如果我不把“case(0):”并使用它:
case ($starost_vozila >= 0 && $starost_vozila < 6):
然后下一个案例将以某种方式变为活动状态,并打印出“$ eko_taksa = 667;”。
当“$ starost_vozila = 0”时,这是所有问题,但是当它比上述情况少于6时,任何数字都有效。
这里的每个var都是int。一切正常,除非“$ starost_vozila = 0”,当我使用“case($ starost_vozila&gt; = 0&amp;&amp; $ starost_vozila&lt; 6)时:”。
我不知道发生了什么...... Oo
对不起,如果这是一个愚蠢的问题。 :(
答案 0 :(得分:8)
switch case不接受需要评估的语句。他们将简单的字符串,布尔值或数字与
进行比较所以说你有
$x = 0
switch( $x ) {
case( $x < 10 ):
...
break;
}
你期待这种情况能够运行,但事实并非如此,这就是为什么
( $x < 10 )
评估为true
所以你实际拥有的是:
$x = 0
switch( $x ) {
case true: //!!!
...
break;
}
0 != true
所以案件失败
你需要使用
if() {
} else if() {
} else {
}
答案 1 :(得分:3)
您错误地使用了switch
。
您的代码理解如下:
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)
将成为TRUE
或FALSE
。 $starost_vozila == ($starost_vozila < 6)
正在将$starost_vozila
与TRUE
或FALSE
进行比较,这不是您想要做的。
我建议在这种情况下使用if
/ elseif
而不是switch
。例如:
if ($starost_vozila == 0) {
...
} else if ($starost_vozila < 6) {
...
} else if ($starost_vozila > 5 && $starost_vozila < 11) {
...
}
答案 2 :(得分:0)
使用Switch就像“if语句”中的==而不是===(不检查类型)。只有空字符串或NULL才会产生整数0 - 除此之外,它们被认为是字符串0。