Оператор switch с двумя переменными одновременно - программирование
Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 5

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

Ответ 6

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

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