Php switch语句不等于零?

Php switch语句不等于零?,php,switch-statement,Php,Switch Statement,我有以下功能可以正常工作,但使用输入值0时除外。我试着四处搜索,看看0是否等于空值,或者我是否做错了什么 当零输入时,它输出大于20的高级。有人能解释一下吗?谢谢 我计划使开关等于0-10、11-20、21-30、31-40、41+,但对于这个例子,我只使用两种场景。谢谢 **当其为20:)时编辑我确实需要值 功能增强计划($data){ $data=(int)$data; 交换机($数据){ 案例(数据=20美元): $结果='先进力量'; 打破 } 返回$result; } 回波强度平面图(

我有以下功能可以正常工作,但使用输入值0时除外。我试着四处搜索,看看0是否等于空值,或者我是否做错了什么

当零输入时,它输出大于20的高级。有人能解释一下吗?谢谢

我计划使开关等于0-10、11-20、21-30、31-40、41+,但对于这个例子,我只使用两种场景。谢谢

**当其为20:)时编辑我确实需要值

功能增强计划($data){
$data=(int)$data;
交换机($数据){
案例(数据=20美元):
$结果='先进力量';
打破
}
返回$result;
}
回波强度平面图(0);

您的逻辑不正确。Switch语句正在检查是否相等。您的代码正在检查
$data
是否等于
TRUE
FALSE

 case( $data < 20 ):
因为
0<20

由于
0
不等于
TRUE
,而是等于
FALSE
(转换后),因此运行第二种情况


基本上,您不能将
开关盒
用于
,而只能用于
=

您的逻辑不正确。Switch语句正在检查是否相等。您的代码正在检查
$data
是否等于
TRUE
FALSE

 case( $data < 20 ):
因为
0<20

由于
0
不等于
TRUE
,而是等于
FALSE
(转换后),因此运行第二种情况


基本上,您不能对
使用
switch case
,而只能对
=

使用
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!!!!!';
}
功能增强计划($length){
如果($length<5)返回“微强度”;
elseif($length<10)返回“微小强度”;
elseif($length<15)返回“小强度”;
elseif($length<20)返回“标准强度”;
elseif($length<30)返回“高级强度”;
否则返回“超级力量!!!”;
}
它将沿着每个条件向下滴流,直到达到它所处的数值。或者,您可以使用类似以下的查找表样式:

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];
}
功能增强计划($length){
$plans=数组(
1=>“超级力量!!!”,
$length<30=>“高级强度”,
$length<20=>“标准强度”,
$length<15=>“小强度”,
$length<10=>“微小强度”,
$length<5=>“微强度”,
);
返回$plans[1];
}

这里有一个关于这个的讨论:

这不是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!!!!!';
}
功能增强计划($length){
如果($length<5)返回“微强度”;
elseif($length<10)返回“微小强度”;
elseif($length<15)返回“小强度”;
elseif($length<20)返回“标准强度”;
elseif($length<30)返回“高级强度”;
否则返回“超级力量!!!”;
}
它将沿着每个条件向下滴流,直到达到它所处的数值。或者,您可以使用类似以下的查找表样式:

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];
}
功能增强计划($length){
$plans=数组(
1=>“超级力量!!!”,
$length<30=>“高级强度”,
$length<20=>“标准强度”,
$length<15=>“小强度”,
$length<10=>“微小强度”,
$length<5=>“微强度”,
);
返回$plans[1];
}

这里讨论了这一点:

在这种情况下使用开关是错误的

用这个


在这种情况下使用开关是错误的

用这个


您对switch语句的理解是错误的!如果长度正好是20,会发生什么?PHP通知当然不是:未定义变量:result!以防万一,您的代码现在也不会为
19
返回任何内容。@Drewdin:太好了!虽然我很抱歉吹毛求疵,但这是
=
而不是
=>
:)@德鲁丁:但是你对switch语句的理解是错误的!如果长度正好是20,会发生什么?PHP通知当然不是:未定义变量:result!以防万一,您的代码现在也不会为
19
返回任何内容。@Drewdin:太好了!虽然我很抱歉吹毛求疵,但这是
=
而不是
=>
:)@德鲁丁:但是
+1同意;当一行三值运算符符合要求时,滥用switch语句。+1如果可以(达到投票限制),但对于边缘情况
20
这是返回“标准强度”,而原始代码没有返回任何值。@pimvdb原始代码没有返回任何值;)但是我还是要加上它,谢谢。@Jonah:今天我很抱歉,但结果也不一样:)但我猜OP不希望函数在
==20时不返回任何内容+1明天:o)@pimvdb:我明白你的意思了,我以为你是说它应该返回
高级强度
,而不是
标准强度
,但你的意思是它不应该返回任何东西。但如果正好是20,他显然不想什么都不归还;当一行三值运算符符合要求时,滥用switch语句。+1如果可以(达到投票限制),但对于边缘情况
20
这是返回“标准强度”,而原始代码没有返回任何值。@pimvdb原始代码没有返回任何值;)B