Как уже упоминалось в комментариях, «условие» в случае должно быть статическим значением, а не логическим выражением.
Кроме того, значение, которое вы включаете (в вашем случае $grade
), должно быть тем, которое вы тестируете. Вы, кажется, используете это как подсказку о том, какую переменную вы назначаете .
Самый простой способ исправить ваш код - использовать конструкцию if-elseif-else:
if ($average >70)
$grade = 'A';
elseif ($average >=60 && $average <=69)
$grade = 'B';
elseif ($average >=50 && $average <=59)
$grade = 'C';
Однако, чтобы быть извращенным и проиллюстрировать, как работает оператор switch, вы также можете сделать следующее:
switch(true){
case ($average >70):
$grade = 'A';
break;
case ($average >=60 && $average <=69):
$grade = 'B';
break;
case ($average >=50 && $average <=59):
$grade = 'C';
break;
};
В этом примере я сравниваю значение true
с каждым из случаев по очереди, где каждое из этих значений-дел на самом деле является результатом вычисления логического выражения. Первое выражение, значение которого соответствует true
, сработает.
Возможно, это не сильно поможет, если вы не понимаете операторов switch.
Редактировать : Я только что заметил, что в логике есть пробел: что, если у кого-то в среднем ровно 70? Используя каскадный оператор, такой как switch или if-else, вы можете исключить часть избыточного (и в данном случае разрушающего) кода, таким образом:
if ($average >=70)
$grade = 'A';
elseif ($average >=60)
$grade = 'B';
elseif ($average >=50)
$grade = 'C';
// ...
else
$grade = 'F';
... и т. Д. До любой низшей ступени, которую вы используете.