切换返​​回错误的值

时间:2017-10-25 06:29:08

标签: php switch-statement

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

分数> = 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;
    }

5 个答案:

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

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

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

答案 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';