Вопрос по php, switch-statement – оператор переключения с двумя переменными одновременно

14

Может ли кто-нибудь предложить лучший способ получить следующий оператор 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") и сравнивать, а не приравнивать переменные к строкам.

Какова реальная проблема, которую выпытаешься решить? Jared Farrish
Ответы ниже @Stikmou и Renaat De Muynck встречают спрашивающего:с вопросом отлично. Другие ответы, хотя и являются, конечно, законными, идут о решении немного по-другому. Aaron

Ваш Ответ

6   ответов
27

но это все еще не идеально.

    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 может сделать заявление if более приятным и легко изменить в будущем. d-_-b
Я думаю это'отлично. Для реального мира это то, что используют настоящие разработчики. Rocco The Taco
ужасно некрасивый, но ненеправильно" либо ... лучше использовать стандартный if () вместо этого, если только для удобочитаемости. Marc B
1

чтобы вкладывать операторы switch:

switch($color){
    case "blue":
        switch($size):
            case "small":
            //do something
            break;
    break;
}
Я не рекомендовал использовать это, на самом деле это очень плохое чтение и не очень хорошая практика. George Plamenov Georgiev
33

это выглядит почти так, как вы хотите:

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

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

Найдено в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; 
}
?-->
0
var $var1 = "something";
var $var2 = "something_else";
switch($var1.$var2) {
case "somethingsomething_else":
    ...
    break;
case "something...":
    break;
case "......":
    break;
}
PHP, а не JavaScript. Marc B
17

рок:

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

но это становится ужасно быстро.

победил'это не проблема для того, что яЯ делаю, но это хорошая точка для воспитания. В любом случае, спасибо за трюк! d-_-b
Я думаю, что у Скузи может быть правильный ответ. Я могу'Мы не можем придумать, как отрицать одну переменную в данном случае, т.е.casce 'blue !small' Wouldn»это не осуществимо, верно? d-_-b
Может быть стоит добавить разделительный символ между строками, может быть, просто запятая или необычно используемый символ (например, труба)? пример: $ color. ','. $ size затем сравнитесиний, маленький» Scuzzy
Это может сработать !! d-_-b

Похожие вопросы