оператор 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")
и сравните, в отличие от приравнивания переменных к строкам.
6 ответов
вы можете изменить порядок сравнения, но это еще не идеал.
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;
}
не работает. Вы могли бы взломать вокруг него с некоторым concatentation строку:
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;
}
?>
ваш другой вариант (хотя и не очень) - это вложить операторы switch:
switch($color){
case "blue":
switch($size):
case "small":
//do something
break;
break;
}
var $var1 = "something";
var $var2 = "something_else";
switch($var1.$var2) {
case "somethingsomething_else":
...
break;
case "something...":
break;
case "......":
break;
}