2012-09-26 16 views
14

Qualcuno potrebbe suggerire il modo migliore per avere la seguente istruzione switch? Non so che è possibile confrontare i due valori in una sola volta, ma questo sarebbe l'ideale:statement statement con due variabili alla volta

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

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


Questo potrebbe essere paragonabile a:

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

Aggiornamento Mi sono reso conto che dovrò essere in grado di annullare ($color !== "blue") e confrontare invece di equiparare le variabili alle stringhe.

+1

Qual è il vero problema che stai cercando di risolvere? –

+0

Le risposte seguenti di @Stikmou e Renaat De Muynck rispondono perfettamente alla domanda del richiedente. Altre risposte, anche se certamente legittime, riguardano la soluzione in modi leggermente diversi. – Aaron

risposta

25

È possibile modificare l'ordine del confronto, ma questo non è ancora l'ideale.

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

orribilmente brutto, ma non "sbagliato" ... meglio andare con uno standard if() invece, se non altro per la leggibilità. –

+1

Grazie! Sono d'accordo .. potrebbe diventare disordinato, e probabilmente lo farò. Sto cercando di vedere se 'switch' potrebbe rendere l'istruzione if più bella e più facile da modificare in futuro. –

+0

Penso che sia perfetto. Per il mondo reale, questo è ciò che gli sviluppatori reali usano. –

16

Non funziona. Potresti incappare in giro con qualche concatenazione di stringhe:

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

ma che diventa brutto abbastanza veloce.

+0

Questo potrebbe funzionare !! –

+4

Basta fare attenzione con valori ambigui che potrebbero non corrispondere ordinariamente, ad es. attiva ''abc'. 'def'', mentre il caso è '' ab '. 'Cdef''. due diversi set di valori, ma producendo lo stesso risultato concatenato. –

+0

non sarà un problema per quello che sto facendo, ma questo è un buon punto per far apparire. Comunque grazie per il trucco! –

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

PHP, non javascript. –

0

L'altra opzione (anche se non abbastanza) è a nidificare le istruzioni switch:

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

utilizzando la nuova sintassi di array, questo appare quasi come quello che vuoi:

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

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