Может ли кто-нибудь предложить лучший способ иметь следующий оператор 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; }