开关盒有三个参数?

时间:2009-08-25 14:00:56

标签: php

是否可以在switch-case中使用三个参数,如下所示:

switch($var1, $var2, $var3){
    case true, false, false:
        echo "Hello";
        break;
}

如果没有,我应该使用if-else还是有更好的解决方案?

7 个答案:

答案 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)

我不知道 - 如果你真的想要这样 - 可能将它们全部转换成字符串,连接然后在你的情况下使用结果字符串?