题
我不明白这里发生了什么。从逻辑上讲,它对我没有任何意义。
<?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时,它返回“high”。这对我没有任何意义。有人能解释一下这里发生了什么吗?
解决方案
将开关($ level)
更改为 switch(true)
,这将有效。
switch
语句执行相等测试关于案件中的价值观。 PHP正在评估您的&gt;
比较,因此 case $ level&gt; 80
变为 case false
。 false
被认为等于 0
,因此第一种情况匹配。
其他提示
case
之后的数量只需要是值,而不是布尔表达式。我猜PHP正在评估 case $ level&gt; 80
作为 case($ level&gt; 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,因此将四舍五入为 。
这并不是真正意图如何使用开关。它是为了评估特定值。
如果在这里使用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...
}
不隶属于 StackOverflow