php - 开关盒中的 0?

标签 php switch-statement

抱歉,这个问题可能很愚蠢,但我有一个案例,当我有一些值为 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;

Switch continue more,但这是我的问题,在这段代码中。

如果我不输入“case (0):”并使用这个:

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

然后下一个案例会以某种方式变得活跃,它会打印出“$eko_taksa = 667;”。

当“$starost_vozila = 0”时,这就是所有问题,但当它是小于 6 的任何数字时,上述情况都有效。

这里的每个 var 都是 int。一切正常,除了当“$starost_vozila = 0”和当我使用“case ($starost_vozila >= 0 && $starost_vozila < 6):”。

我不知道发生了什么……哎呀

抱歉,如果这是一个愚蠢的问题。 :(

最佳答案

switch cases 不采用需要评估的语句。他们采用简单的字符串、 bool 值或数字进行比较

假设你有

$x = 0

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

您期望该案例能够运行,但它并没有运行,这就是原因

( $x < 10 )评估为 true 所以你实际拥有的是:

$x = 0

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

0 != true所以这个案子失败了

你需要使用

if() {

} else if() {

} else {

}

关于php - 开关盒中的 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2259266/

相关文章:

php - 在php中重命名文件

php - 在 sql 查询中使用 php 变量

php - PHP解析/语法错误;以及如何解决它们

c# - 如何阻止C#的switch语句生成CIL switch指令

javascript - Switch 中的 indexOf

php - 如何使用 Laravel 5.3 注销并重定向到登录页面?

PHP 正则表达式 : need some explanation

java - 在 Java 7 中切换忽略大小写

ios - 如何根据变化的属性在 Swift 中实现 enum 和 switch 语句?

c++ - 编写一个程序,要求用户输入邮政编码并打印条形码。在 C++ 中