php - 开关返回错误值

标签 php switch-statement

我有一个 switch 语句来根据学生获得的分数显示成绩。

分数 >= 80 的学生获得 A
分数>=70的同学得B
分数 >= 50 的学生获得 C
分数 >= 30 的学生获得 D
分数 >= 0 的学生获得 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;
    }

最佳答案

您尝试将 $point 与 bool 值进行比较(例如 $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;
}

demo: 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';
}

demo: https://ideone.com/FRlorS

关于php - 开关返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46925362/

相关文章:

objective-c - c中的模拟器/生成的switch语句范围

c++ - 在 case 语句标签中使用函数调用

java - "loops"是 Java 中的 "Conditional Statement"类型吗?

php - 为什么php不赞成使用的功能(相对于反对使用的功能)不调用error_handler函数?

php - 从 WooCommerce 中的另一个脚本添加客户备注

c++ - 高效的switch语句

r - 如何在 r 中的一组观察值之间切换值

PHP 和 Node.js 还是只有 Node.js?

php - PEAR 包通常安装在哪里?

php - 从mysql返回数据并反序列化