簡體   English   中英

切換返​​回錯誤的值

[英]Switch return wrong value

我有一個切換聲明,根據學生得到的分數顯示成績。

得分> = 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與布爾值進行比較(如$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

這不起作用,您嘗試使用布爾條件。 使用if else代替它。

是的,顯然這個問題是重復的。 而不是使用

開關($ 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;
}

有關詳細信息,請查看此問題

您可以使用2次比較,例如:

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

等等..

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM