оператор переключения с двумя переменными одновременно

Может ли кто-нибудь предложить лучший способ получить следующий оператор 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 Farrish26 сент. 2012 г., 06:57
Какова реальная проблема, которую выпытаешься решить?
 Aaron31 июл. 2015 г., 02:38
Ответы ниже @Stikmou и Renaat De Muynck встречают спрашивающего:с вопросом отлично. Другие ответы, хотя и являются, конечно, законными, идут о решении немного по-другому.

Ответы на вопрос(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;
    }
 Rocco The Taco11 дек. 2017 г., 20:14
Я думаю это'отлично. Для реального мира это то, что используют настоящие разработчики.
 d-_-b26 сент. 2012 г., 07:00
Спасибо! Я согласен .. может запутаться, и, вероятно, будет. Я'я пытаюсь увидеть,switch может сделать заявление if более приятным и легко изменить в будущем.
 Marc B26 сент. 2012 г., 06:57
ужасно некрасивый, но ненеправильно" либо ... лучше использовать стандартный if () вместо этого, если только для удобочитаемости.

Найдено в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;
}
 George Plamenov Georgiev21 мар. 2018 г., 11:00
Я не рекомендовал использовать это, на самом деле это очень плохое чтение и не очень хорошая практика.

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

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

    case ['red', 'large'];
        echo 'red and large';
    break;
}
var $var1 = "something";
var $var2 = "something_else";
switch($var1.$var2) {
case "somethingsomething_else":
    ...
    break;
case "something...":
    break;
case "......":
    break;
}
 Marc B26 сент. 2012 г., 07:01
PHP, а не JavaScript.

рок:

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

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

 Marc B26 сент. 2012 г., 07:05
Просто будьте осторожны с неоднозначными значениями, которые обычно могут не совпадать, например, включить'abc' . 'def'в то время как дело'ab' . 'cdef', два разных набора значений, но с одинаковым сцепленным результатом.
 Scuzzy26 сент. 2012 г., 07:07
Может быть стоит добавить разделительный символ между строками, может быть, просто запятая или необычно используемый символ (например, труба)? пример: $ color. ','. $ size затем сравнитесиний, маленький»
 Marc B26 сент. 2012 г., 07:12
не' строки будет просто логическим значением false. если вам нужно отрицать вещи или проверять неравенство, то переключитесь на обычную структуру if / then / else. операторы case предназначены для нескольких тестов на равенство для одного значения ядра. эта конкатенация является просто оскорбительным продолжением этого, но вы можетеэто принципиально не меняет того факта, чтоЭто всего лишь тест на равенство.
 d-_-b26 сент. 2012 г., 07:10
Я думаю, что у Скузи может быть правильный ответ. Я могу'Мы не можем придумать, как отрицать одну переменную в данном случае, т.е.casce 'blue !small' Wouldn»это не осуществимо, верно?
 d-_-b26 сент. 2012 г., 06:59
Это может сработать !!
 d-_-b26 сент. 2012 г., 07:06
победил'это не проблема для того, что яЯ делаю, но это хорошая точка для воспитания. В любом случае, спасибо за трюк!
 HellBaby02 мая 2018 г., 22:44
Просто попробуйте следующий сценарий ... $ color = 3 и $ size = 20; и разреши'посмотрим, если это хорошая идея. По умолчанию php будет обрабатывать это как 3.2 вместо "3,20" так что ваш сценарий провалился.

Ваш ответ на вопрос