【问题标题】:Switch return wrong value开关返回错误值
【发布时间】:2017-10-25 06:29:08
【问题描述】:

我有一个 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;
    }

【问题讨论】:

标签: php switch-statement


【解决方案1】:

您尝试将$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;
}

演示: 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

【讨论】:

    【解决方案2】:

    这不起作用,您尝试使用布尔条件。使用 if else 代替它。

    【讨论】:

      【解决方案3】:

      是的,显然这个问题是重复的。而不是使用

      开关($点)

      你应该使用

      开关(真)

      我检查过它有效

      <?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

      【讨论】:

        【解决方案4】:

        您可以使用 2 个比较,例如:

        case $point >= 80:
           echo 'A';
           break;
        case ($point < 80 && $point >= 70):
           echo 'B';
           break;
        

        等等..

        【讨论】:

          【解决方案5】:

          Switch/Case 不支持 >... 试试 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';
          

          【讨论】:

          • 另请注意,您的原件中间有一个奇怪的错误,它显示“return 'C'”而不是“echo 'C'”。
          猜你喜欢
          • 2018-02-07
          • 2023-03-04
          • 2020-01-26
          • 2021-07-17
          • 2019-02-03
          • 2015-06-19
          • 2014-01-16
          • 2018-12-31
          • 1970-01-01
          相关资源
          最近更新 更多