[英]PHP: why my switch always picks the same value?
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。
我认为您不能使用这样的开关。 它需要价值。 它不接受布尔条件。 在这里检查http://php.net/manual/en/control-structures.switch.php
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
。
上面的代码将起作用。
您正在检查错误的变量,因此在整个case
语句中应将$v1
替换$v1
$v
。 而且, 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;
}
}
使用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;
}
看一下您的案例标签:它们是关系运算的结果,所以它们的总和为true或false! %v
将与这些布尔值进行比较。 这就是为什么您在输入案例中观察到类似的输出的原因。
用if
块替换switch
,一切都会好起来。 并查看您对$v1
的使用情况; 你是那个意思吗
在您的开关中,我可以在第二,第三和第四种情况下看到变量$ v1,因此请考虑一下我们不通过第一种情况的情况,那么变量$ v1呢? 它尚未设置,因此总是默认情况或第一种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.