Я не понимаю, что здесь происходит. По логике, это не имеет никакого смысла для меня.
<?php $level = 0; switch ($level) { case $level > 80: $answer = 'high'; break; case $level > 60: $answer = 'moderate-to-high'; break; case $level > 40: $answer = 'moderate'; break; case $level > 20: $answer = 'low-to-moderate'; break; default: $answer = 'low'; break; } echo $answer; ?>
Когда $ level == 0, он возвращает «высокий». Это не имеет никакого смысла для меня. Может кто-нибудь объяснить, что здесь происходит?
Изменить switch ($level)
на switch (true)
и это сработает.
операторы switch
выполняют тесты равенства для значений в случаях. PHP оценивает ваши >
сравнения, поэтому case $level > 80
становится case false
. false
считается равным 0
, поэтому первый случай соответствует.
Количество после case
должно быть просто значением, а не логическим выражением. Я предполагаю, что PHP оценивает case $level > 80
как case ($level > 80)
который становится case 0
(т. Е. False, поскольку $level
действительно не менее 80), и поэтому вы соответствуете первому случаю ,
Как указывали другие, вы не можете использовать такой переключатель , но как определить его так:
<? $level = 21; $answers = array('low', 'low-to-moderate', 'moderate', 'moderate-to-high', 'high'); echo $answers[intval(($level-1)/20)]; ?>
Примечание : Если $ level = 0 , то выражение внутри intval () будет равно -1/20 , что меньше -1 и поэтому будет округлено до 0 .
На самом деле это не так, как должен использоваться коммутатор. Он должен оцениваться по определенному значению.
Используйте if / else, если здесь, вместо того, чтобы усложнять вашу жизнь, чтобы сделать работу переключателя такой, как одна.
Вы уверены, что можете сделать это в php?
Я просто проверил руководство коммутатора, и вы должны предоставить отличное значение.
Я думаю, если вы можете написать это снова во что-то вроде:
$levelDivTwenty = intval($level/20); $levelDivTwenty = ($levelDivTwenty>4)?4:$levelDivTwenty;
а затем случай на этом.
switch ($levelDivTwenty) { case 4: //same as $level > 80 before... case 3: //>60 etc... }