2012-09-26 98 views
14

有人可能会建议使用下面的switch语句的最佳方式吗?我不知道这是可能的两个值一次比较,但是这将是理想的:一次有两个变量的switch语句

switch($color,$size){ 
    case "blue","small": 
     echo "blue and small"; 
    break; 

    case "red","large"; 
     echo "red and large"; 
    break; 
} 


这可能是媲美:

if (($color == "blue") && ($size == "small")) { 
    echo "blue and small"; 
} 
elseif (($color == "red") && ($size == "large")) { 
    echo "red and large"; 
} 

更新 我意识到我需要能够否定($color !== "blue")并进行比较,而不是将变量等同于字符串。

+1

您试图解决的实际问题是什么? –

+0

以下由@Stikmou和Renaat De Muynck解答完全符合提问者的问题。其他答案虽然是合法的,但它们的解决方法略有不同。 – Aaron

回答

25

您可以更改比较顺序,但这仍然不理想。

switch(true) 
    { 
     case ($color == 'blue' and $size == 'small'): 
     echo "blue and small"; 
     break; 
     case ($color == 'red' and $size == 'large'): 
     echo "red and large"; 
     break; 
     default: 
     echo 'nothing'; 
     break; 
    } 
+3

丑陋丑陋,但不是“错误”...更好地使用标准if()代替,如果只是易读性。 –

+1

谢谢!我同意......可能会变得混乱,并可能会。我试图看看'switch'是否可以使if语句看起来更好,更容易在将来修改。 –

+0

我认为这是完美的。对于现实世界,这是真正的开发人员使用的。 –

16

不起作用。你可以破解它周围的一些字符串连接:

switch($color . $size) { 
    case 'bluesmall': ... 
    case 'redlarge': ... 
} 

但得到丑陋相当快。

+0

这可以工作! –

+4

只要注意通常可能不匹配的模糊值,例如打开''abc'。 'def',而案例是'ab'。 “cdef''。两组不同的值,但产生相同的连接结果。 –

+0

不会成为我在做什么的问题,但这是一个很好的提示。无论如何谢谢你的诀窍! –

0
var $var1 = "something"; 
var $var2 = "something_else"; 
switch($var1.$var2) { 
case "somethingsomething_else": 
    ... 
    break; 
case "something...": 
    break; 
case "......": 
    break; 
} 
+0

PHP,而不是JavaScript。 –

0

你的其他选择(虽然不漂亮)是嵌套的switch语句:

switch($color){ 
    case "blue": 
     switch($size): 
      case "small": 
      //do something 
      break; 
    break; 
} 
22

使用新的数组语法,这看起来几乎像什么你想要:

switch ([$color, $size]) { 
    case ['blue', 'small']: 
     echo 'blue and small'; 
    break; 

    case ['red', 'large']; 
     echo 'red and large'; 
    break; 
}