3

信息

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

问题

我有这个 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);

我觉得这是“你一次就写太多代码”的问题之一,答案就在我面前,但我就是看不到!

4

3 回答 3

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

}
于 2013-11-11T14:18:32.653 回答
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第一种情况,使其运行

于 2013-11-11T14:22:56.900 回答
2

您可以为此消除大量代码的另一件事是简单地执行此操作

return floor(($points+100)/100);
于 2013-11-11T14:19:58.417 回答