我想知道是否可以在switch语句/ case中复制这种检查:
if(isset($_POST["amount"]) && (isset($_POST["fruit"]))) {
$amount = $_POST['amount'];
$fruit = $_POST['fruit'];
if($fruit == "Please select a fruit") {
echo "<script>alert('Required Field: You must choose a fruit to receive your total')</script>";
} else if(empty($fruit) or ($amount<=0) or ($amount>50)) {
echo "<script>alert('Required Field: You must enter an amount between 0-50g to receive your total')</script>";
} ... and further on
注意:我更加关注可以在一个IF中完成的&&
比较,以及是否可以在switch case中完成并接收类似嵌套if / else的结果。如果不可能,为什么?哪种方法更有效,为什么?
答案 0 :(得分:0)
我宁愿坚持使用If-Else If条件而不是将其转换为Switch语句。 您必须意识到switch语句只接受一个参数:
switch($arg)
在您的情况下,amount
为$_POST["amount"]
,fruit
为$_POST["fruit"]
。
您的第一个问题是如何在switch语句中传递这两个值。
答案 1 :(得分:0)
您不能在这种情况下使用开关,因为您正在检查产生isset
结果的两个变量的条件(boolean
)。实际上你可以做switch
这个条件并在这个代码为true的情况下切换,如果该代码为false。但这不会有多大意义。
在一个开关中,您可以只检查一个变量或表达式,在这种情况下,您执行该开关评估结果的代码。
所以不,你不能用这些嵌套的ifs进行切换。
编辑:为了使这一点更清晰,当你发现自己在同一个变量上使用多个ifs时,最好使用swicth:
if ($var < 3)
{
// do this
}
elseif ($var < 6)
{
// do that
}
else
{
// do something other
}
写得好多了:
switch ($var)
{
case < 3:
// do this
break;
case < 6:
// do that
break;
default:
// do somehting other
}