switch语句不等于零?

时间:2011-08-13 20:11:03

标签: php switch-statement

我有以下功能正常工作,除了你使用输入值为0时我试过去看看0是否等同于NULL或者我做错了什么。

当输入零时,它输出高于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 );

3 个答案:

答案 0 :(得分:12)

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

 case( $data < 20 ):

将评估为:

 case( TRUE ):

因为0 < 20

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

基本上,您不能将switch case用于<>,而只能用于==

答案 1 :(得分:4)

那不是转换语句的方式。他们将案例与您提供给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

答案 2 :(得分:0)

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

使用此

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

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

echo strengthPlan( 0 );