оператор 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") и сравнить в отличие от приравнивания переменных к строкам.

Вы можете изменить порядок сравнения, но это все еще не идеально.

  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; } 

Используя синтаксис нового массива, это выглядит почти так, как вы хотите:

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

Не работает. Вы можете взломать его с помощью некоторой последовательности:

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

но это становится уродливым довольно быстро.

Найдено по адресу: http://www.siteduzero.com/forum/sujet/switch-a-plusieurs-variables-75351

 <?php $var1 = "variable1"; $var2 = "variable2"; $tableau = array($var1, $var2); switch ($tableau){ case array("variable1", "variable2"): echo "Le tableau correspond !"; break; case array(NULL, NULL): echo "Le tableau ne correspond pas."; break; } ?> 
 var $var1 = "something"; var $var2 = "something_else"; switch($var1.$var2) { case "somethingsomething_else": ... break; case "something...": break; case "......": break; } 

Другой вариант (хотя и не очень красивый) заключается в том, чтобы вложить выражения switch:

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