我有一个切换声明,根据学生得到的分数显示成绩。
分数> = 80的学生获得A
点数> = 70的学生获得B
点数> = 50的学生获得C
积分> = 30的学生得到D
积分> gt的学生得到E
问题是当点为0时,它返回A而不是E.这是switch
语句。
$point = 0;
switch ($point) {
case $point >= 80:
echo 'A';
break;
case $point >= 70:
echo 'B';
break;
case $point >= 50:
return 'C';
break;
case $point >= 30:
echo 'D';
break;
case $point >= 0:
echo 'E';
break;
default:
echo 'F';
break;
}
答案 0 :(得分:5)
您尝试将$point
与布尔值(如$point >= 80
)进行比较。它匹配第一种情况,因为$point = 0
为false而$point >= 80
也为false,因此它匹配第一种情况并回显A
。如果要对案例进行比较,则必须使用以下代码:
$point = 0;
switch (true) {
case $point >= 80:
echo 'A';
break;
case $point >= 70:
echo 'B';
break;
case $point >= 50:
echo 'C';
break;
case $point >= 30:
echo 'D';
break;
case $point >= 0:
echo 'E';
break;
default:
echo 'F';
break;
}
使用if
和elseif
代替switch
的另一种解决方案:
$point = 0;
if ($point >= 80) {
echo 'A';
} elseif ($point >= 70) {
echo 'B';
} elseif ($point >= 50) {
echo 'C';
} elseif ($point >= 30) {
echo 'D';
} elseif ($point >= 0) {
echo 'E';
} else {
echo 'F';
}
答案 1 :(得分:1)
这不起作用,您尝试使用布尔条件。使用if else代替它。
答案 2 :(得分:1)
是的,显然这个问题是重复的。而不是使用
开关($ point)
你应该使用
开关(true)
它可以检查
<?php
$point = 0;
switch (true) {
case $point >= 80:
echo 'A';
break;
case $point >= 70:
echo 'B';
break;
case $point >= 50:
return 'C';
break;
case $point >= 30:
echo 'D';
break;
case $point >= 0:
echo 'E';
break;
default:
echo 'F';
break;
}
有关详细信息,请查看this question
答案 3 :(得分:0)
您可以在以下情况下使用2次比较:
case $point >= 80:
echo 'A';
break;
case ($point < 80 && $point >= 70):
echo 'B';
break;
依旧......
答案 4 :(得分:0)
Switch / Case不支持&gt; ...尝试if / elseif ....
$point = 0;
if ($point >= 80)
echo 'A';
elseif ($point >= 70)
echo 'B';
elseif ($point >= 50)
echo 'C';
elseif ($point >= 30)
echo 'D';
elseif ($point >= 0)
echo 'E';
else
echo 'F';