2017-10-25 36 views
5

Mam instrukcję przełącznika, aby pokazać ocenę na podstawie punktów, które otrzymują uczniowie.Przełącz niewłaściwą wartość zwrotu

studenci z punktów> = 80 dostać
studenci z punktów> = 70 get B
studenci z punktów> = 50 uzyskać C
studenci z punktów> = 30 get D
studenci z punktów> = 0 get E

Problem występuje, gdy punkt ma wartość 0, zwraca A zamiast E. Oto instrukcja 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; 
    } 
+2

Możliwy duplikat [php instrukcji CASE nie pracuje z zerowym wartości] (https ://przepełnienie stosu.com/questions/1800798/php-case-statement-nie-działających-z-zerowymi wartościami) –

+1

jeśli 'var_dump ($ point> = 80)' jego 'false' i' false' jest uważane '0', więc najpierw Sprawa jest dopasowywana niezależnie od stanu logicznego. –

Odpowiedz

5

spróbować porównać $point na wartość logiczną (jak $point >= 80). Jest to zgodne z pierwszym przypadkiem, ponieważ $point = 0 jest fałszywe, a $point >= 80 również jest fałszywe, więc pasuje do pierwszego przypadku i wyświetla echo A. Jeśli chcesz użyć porównania w przypadkach trzeba użyć następującego kodu:

$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

Innym rozwiązaniem użyciu if i elseif zamiast 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

0

Można użyć 2 porównań w przypadku takim jak:

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

i tak dalej ..

1

To nie zadziała, spróbuj użyć stan logiczny. Użyj, jeśli zamiast tego.

+0

tak, jeśli jeszcze działa, – Abaij

+0

Nie zapewnia to odpowiedzi na pytanie. Gdy masz już wystarczającą [reputację] (https://stackoverflow.com/help/whats-reputation), będziesz mógł [komentować dowolny wpis] (https://stackoverflow.com/help/privileges/comment); zamiast tego [dostarczaj odpowiedzi, które nie wymagają wyjaśnień od pytającego] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-zamiast). - [Z recenzji] (/ review/low-quality-posts/17729035) – Krumia

1

tak oczywiście to pytanie jest duplikatem. zamiast używać

przełącznik ($ point)

należy użyć

przełącznik (true)

i działa Sprawdziłem

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

więcej szczegółów proszę sprawdzić this question

0

przełącznik/Case nie obsługuje> ... Spróbuj 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'; 
+0

Zwróć też uwagę, że oryginał ma dziwny błąd w środku, w którym jest napisane "return" C "" zamiast "echo" C "". – Todd