2012-09-26 33 views
14

Birisi aşağıdaki anahtar deyimine sahip olmanın en iyi yolunu önerebilir mi? Ben aynı anda iki değeri karşılaştırmak mümkün olduğunu bilmiyorum ama bu ideal olacaktır:iki değişkenli bir anahtar deyimi

if (($color == "blue") && ($size == "small")) { 
    echo "blue and small"; 
} 
elseif (($color == "red") && ($size == "large")) { 
    echo "red and large"; 
} 

Güncelleme :

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

    case "red","large"; 
     echo "red and large"; 
    break; 
} 


Bu karşılaştırılabilir olabilir ($color !== "blue")'u etkisiz hale getirmem ve değişkenleri dizgilerle karşılaştırmak yerine karşılaştırmam gerektiğini anladım.

+1

Çözmeyi denediğiniz asıl sorun nedir? –

+0

@Stikmou ve Renaat De Muynck tarafından verilen cevaplar, askerin sorusunu mükemmel bir şekilde karşılıyor. Diğer cevaplar, kesinlikle meşru olsa da, çözümü biraz farklı şekillerde ele alıyorlar. – Aaron

cevap

25

Karşılaştırma sırasını değiştirebilirsiniz, ancak bu hala ideal değildir.

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

iğrenç bir şekilde çirkin, ama "yanlış" ya da ... bir standart ile() bunun yerine sadece okunabilirlik için gitmek için daha iyi. –

+1

Teşekkürler! Katılıyorum ... dağınık ve muhtemelen olacak. Gelecekte değişiklik yapmanın daha güzel ve daha kolay olduğunu göstermek için 'switch' yapıp yapmayacağımı görmeye çalışıyorum. –

+0

Bence bu mükemmel. Gerçek dünya için, gerçek geliştiricilerin kullandığı budur. –

16

Çalışmıyor. Bazı dize uyumluluğunun etrafından kesebilirsiniz:

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

Ancak çirkinlik çok çabuk olur.

+0

Bu işe yarayabilir! –

+4

Normalde eşleşmeyebilecek belirsiz değerlere dikkat edin, örn. 'abc'yi açın. 'def', dava ise 'ab'. 'Cdef''. iki farklı değer kümesi, ancak aynı birleştirilmiş sonucu üretir. –

+0

, yaptığım şey için bir sorun olmayacak, ama bu getirmek için iyi bir nokta. Her neyse hile için teşekkürler! –

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

PHP, javascript değil. –

0

Sizin başka seçenek de Bulunan: Yeni dizi sözdizimi kullanarak

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

, bu neredeyse neye benzediğini İstediğiniz:

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

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