function getValue($v) {
$b = 22;
switch ($v) {
case ($v <= $b * 1.2):
$v1 = $b; break;
case ($v1 > $b * 1.2 && $v1 <= $b * 2.2):
$v1 = $b * 2; break;
case ($v1 > $b * 2.2 && $v1 <= $b * 3.2):
$v1 = $b * 3; break;
case ($v1 > $b * 3.2):
$v1 = $b * 4; break;
default:
$v1 = $b;
}
return $v1;
}
getValue(25)
或getValue(45)
始终返回22.
答案 0 :(得分:4)
我不认为你可以使用这样的开关。它需要价值观。它不接受布尔条件。点击http://php.net/manual/en/control-structures.switch.php
答案 1 :(得分:3)
function getValue($v) {
$b = 22;
switch ($v) {
case ($v <= $b * 1.2):
$v1 = $b; break;
case ($v > $b * 1.2 && $v <= $b * 2.2):
$v1 = $b * 2; break;
case ($v > $b * 2.2 && $v <= $b * 3.2):
$v1 = $b * 3; break;
case ($v > $b * 3.2):
$v1 = $b * 4; break;
default:
$v1 = $b;
}
return $v1;
}
您错误地使用$v1
而不是$v
。
以上代码可以使用。
答案 2 :(得分:2)
您正在检查错误的变量,因此您应该在$v1
语句中将$v
替换为case
。此外,switch
语句旨在接受常量值,因此您最好用if
替换它们。
此外,您的部分表达式是多余的,因为您已经检查过它们。在检查$v <= $b * 1.2
并发现它不是之后,无需在下一个表达式中检查$v > $b * 1.2
。您的default
子句永远无法匹配,因为$v
的所有值均为<= $b * 3.2
或> $b * 3.2
。
function getValue($v) {
$b = 22;
if ($v <= $b * 1.2) {
return $b;
} elseif ($v <= $b * 2.2) {
return $b * 2;
} elseif ($v <= $b * 3.2) {
return $b * 3;
} else {
return $b * 4;
}
}
答案 3 :(得分:2)
使用switch
,您可以针对案例测试给定值。
所以你的陈述是$v == ($v <= $b * 1.2)
,$v == ($v1 > $b * 1.2 && $v1 <= $b * 2.2)
等。
您可以针对true
进行切换和测试:
function getValue($v) {
$b = 22;
switch (true) {
case ($v <= $b * 1.2):
$v1 = $b; break;
case ($v1 > $b * 1.2 && $v1 <= $b * 2.2):
$v1 = $b * 2; break;
case ($v1 > $b * 2.2 && $v1 <= $b * 3.2):
$v1 = $b * 3; break;
case ($v1 > $b * 3.2):
$v1 = $b * 4; break;
default:
$v1 = $b;
}
return $v1;
}
但在这种情况下,if
/ else
似乎是更好的选择:
function getValue($v) {
$b = 22;
if ($v <= $b * 1.2) {
$v1 = $b;
} elseif ($v1 > $b * 1.2 && $v1 <= $b * 2.2) {
$v1 = $b * 2;
} elseif ($v1 > $b * 2.2 && $v1 <= $b * 3.2) {
$v1 = $b * 3;
} elseif ($v1 > $b * 3.2) {
$v1 = $b * 4;
} else {
$v1 = $b;
}
return $v1;
}
答案 4 :(得分:1)
查看你的案例标签:它们是关系操作的结果,所以它们都评估为真或假! %v
将与这些布尔值进行比较。这就是你为输入案例观察这种类似输出的原因。
将switch
替换为if
块,一切都会好的。并检查您对$v1
的使用情况;你是说那个意思吗?
答案 5 :(得分:0)
在你的开关中我可以在第二个和第三个和第四个案例中看到变量$ v1,所以想想我们不会经历第一个案例的条件那么变量$ v1那么是什么?它还没有设置,所以它始终是案例默认或第一种情况。