为什么这个switch语句没有返回0是0-100?

时间:2013-11-11 14:14:35

标签: php switch-statement

信息

我目前正在为我的网站制作用户级系统。我的用户表中有一个点列,它将在某些奖项和里程碑等上增加。

问题

我有这个switch语句,它接受用户点并将它们转换为返回的级别。但它说“0”不在0-100选项中,而是在100-200选项中。

function userLevel($points){

    switch ($points) {
        case ($points>=0 && $points<100):
            return 1; // Level 1
            break;
        case ($points>=100 && $points <200):
            return 2; // Level 2
            break;
        case ($points>=200 && $points<300):
            return 3; // Level 3
            break;
        case ($points>=300 && $points<400):
            return 4; // Level 4
            break;
    }

}

echo userLevel(0);

我觉得这是其中一个“你已经为一次坐着编码过多”的问题而且答案就在我面前,但我只是看不到它!

3 个答案:

答案 0 :(得分:5)

由于您的案件使用条件,您可能想要启用TRUE

function userLevel($points){

    switch (true) {
        case ($points>=0 && $points<100):
            return 1; // Level 1
            break;
        case ($points>=100 && $points <200):
            return 2; // Level 2
            break;
        case ($points>=200 && $points<300):
            return 3; // Level 3
            break;
        case ($points>=300 && $points<400):
            return 4; // Level 4
            break;
    }

}

答案 1 :(得分:3)

原因是你的代码正在变成这个

function userLevel($points){

    switch (0) {
        case (true):  // compare 0 to true
            return 1; // Level 1
            break;
        case (false):  // compare 0 to false 
            return 2; // Level 2
            break;
        case (false):
            return 3; // Level 3
            break;
        case (false):
            return 4; // Level 4
            break;
    }

}

echo userLevel(0);

第一种情况不匹配,因为0 != true

第二种情况匹配,因为0 == false

因此第二个选项运行

正如其他人所说的那样在开关中使用true,那么它就变成了true == true作为第一种情况,进行了那次运行

答案 2 :(得分:2)

为了消除大量代码,你可以做的另一件事就是简单地执行此操作

return floor(($points+100)/100);