Switch语句不等于零


switch statement will not equate zero?

我有一个正常工作的函数,除了当您使用输入值0时。我试着四处搜索,看看0是否等于NULL,或者我是否做错了什么。

当输入0时,输出大于20的高级值。有人能解释一下吗?由于

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

**编辑我想要值当它是20:)

function strengthPlan( $data ) {
    $data = ( int ) $data;
    switch( $data ) {
        case( $data <= 19 ):
            $result = 'standard strength';
            break;
        case( $data >= 20 ):
            $result = 'advanced strength';
            break;
    }
    return $result;
}
echo strengthPlan( 0 );

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

 case( $data < 20 ):

将计算为:

 case( TRUE ):

因为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!!!!!';
}

它将沿着每个条件滴入,直到达到它所处的范围内的数字。或者,您可以使用类似这样的查找表样式:

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];
}

这里有一个关于这个的讨论:http://forums.devnetwork.net/viewtopic.php?f=50&t=113253

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

用这个

http://sandbox.phpcode.eu/g/b4053.php

<?php 
function strengthPlan( $data ) { 
    return ($data > 20) ? 'advanced strenght' : 'standard strenght'; 
} 
echo strengthPlan( 0 );