web-dev-qa-db-ja.com

一度に2つの変数を含むswitchステートメント

誰かが次のswitchステートメントを作成する最良の方法を提案できますか? 2つの値を同時に比較できることはわかりませんが、これは理想的です。

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")と比較して、変数を文字列と同等にするのではなく、.

16
d-_-b

比較の順序は変更できますが、これはまだ理想的ではありません。

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

新しい配列構文を使用すると、これはあなたが望むものにほとんど似ています:

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

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

動作しません。あなたはいくつかの文字列連結でそれをハックすることができます:

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

しかし、それはかなり醜くなります。

17
Marc B

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

他のオプション(かなりではありません)は、switchステートメントをネストすることです。

switch($color){
    case "blue":
        switch($size):
            case "small":
            //do something
            break;
    break;
}
1
Ryre
var $var1 = "something";
var $var2 = "something_else";
switch($var1.$var2) {
case "somethingsomething_else":
    ...
    break;
case "something...":
    break;
case "......":
    break;
}
0
Raj Adroit