是否可以在switch-case中使用三个参数,如下所示:
switch($var1, $var2, $var3){
case true, false, false:
echo "Hello";
break;
}
如果没有,我应该使用if-else还是有更好的解决方案?
答案 0 :(得分:22)
语法不正确,我不推荐它,即使它是。但是如果真的想要使用这样的结构,你可以将你的值放到一个数组中:
switch (array($var1, $var2, $var3)) {
case array(true, false, false):
echo "hello";
break;
}
答案 1 :(得分:3)
这里没有切换情况。你有一个多重条件:
if($var && !($var2 || $var3)) { ...
答案 2 :(得分:3)
我只想使用if / else
if($var1 == true && $var2 == false && $var3 == false){
echo "Hello";
}
或
if($var1 && !($var2 && $var3)) {
echo "Hello";
}
答案 3 :(得分:1)
我认为您的语法无效。
我将嵌套switch语句。
答案 4 :(得分:1)
另一种选择是创建一个函数,将三个参数映射到一个整数,并在switch语句中使用它。
function MapBool($var1, $var2, $var3){
// ...
}
switch(MapBool($var1, $var2, $var3)) {
case 0:
echo "Hello";
break;
// ...
}
答案 5 :(得分:1)
这是以前通过按位运算符处理的事情:
if (($var1 << 2) & ($var2 << 1) & $var3) == 4) ...
...当'true'为1时返回。
话虽如此,上面的内容很简洁,但很难阅读和维护。然而,如果你有很多类似的陈述,转移/ AND可能是让事情得到控制的一种方式:
switch (($var1 << 2) & ($var2 << 1) & $var3)) {
case 0: // false, false, false
...stuff...
case 1: // false, false, true
...different stuff...
// all 8 cases if you REALLY care
}
答案 6 :(得分:-1)
我不知道 - 如果你真的想要这样 - 可能将它们全部转换成字符串,连接然后在你的情况下使用结果字符串?