切换返​​回错误的值

Aba*_*aij 5 php switch-statement

我有一个切换声明,根据学生得到的分数显示成绩.

得分> = 80的
学生得分> = 70的
学生得分> = 50的B
学生得分> = 30的C
学生得分> = 0的D 学生得到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;
    }
Run Code Online (Sandbox Code Playgroud)

Seb*_*sch 5

您尝试与$point布尔值(如$point >= 80)进行比较.它匹配第一种情况,因为它$point = 0是假的,$point >= 80也是假的,所以它匹配第一种情况和回声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;
}
Run Code Online (Sandbox Code Playgroud)

演示: https ://ideone.com/lyBUmA

使用ifelseif代替的另一个解决方案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';
}
Run Code Online (Sandbox Code Playgroud)

演示: https ://ideone.com/FRlorS