信息
我目前正在为我的网站制作用户级系统。我的用户表中有一个点列,它将在某些奖项和里程碑等上增加。
问题
我有这个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);
我觉得这是其中一个“你已经为一次坐着编码过多”的问题而且答案就在我面前,但我只是看不到它!
答案 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);