2012-09-26 15 views
14

¿Alguien podría sugerir la mejor manera de tener la siguiente instrucción de cambio? No sé que es posible comparar dos valores a la vez, pero esto sería ideal:instrucción de cambio con dos variables a la vez

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

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


Esto podría ser comparable a:

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

actualización Me di cuenta de que necesitaría poder negar ($color !== "blue") y comparar en lugar de igualar variables a cadenas.

+1

¿Cuál es el problema real que estás tratando de resolver? –

+0

Las respuestas a continuación de @Stikmou y Renaat De Muynck responden perfectamente a la pregunta del investigador. Otras respuestas, si bien son legítimas, abordan la solución de maneras ligeramente diferentes. – Aaron

Respuesta

25

Puede cambiar el orden de la comparación, pero esto aún no es ideal.

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

horriblemente feo, pero no "incorrecto" tampoco ... es mejor ir con un estándar if() en cambio, aunque solo sea por la legibilidad. –

+1

Gracias! Estoy de acuerdo ... podría ser complicado, y probablemente lo sea. Estoy tratando de ver si 'switch' podría hacer que la declaración if se vea mejor y más fácil de modificar en el futuro. –

+0

Creo que es perfecto. Para el mundo real, esto es lo que usan los desarrolladores reales. –

16

No funciona. Podrías hackearlo con una concatenación de cadenas:

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

pero eso se pone bastante rápido.

+0

¡Esto podría funcionar! –

+4

Solo tenga cuidado con valores ambiguos que pueden no coincidir normalmente, p. enciende ''abc'. 'def'', mientras que el caso es ''ab'. 'cdef''. dos conjuntos diferentes de valores, pero que producen el mismo resultado concatenado. –

+0

no será un problema para lo que estoy haciendo, pero ese es un buen punto para mencionar. De todos modos, ¡gracias por el truco! –

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

PHP, no javascript. –

0

Su otra opción (aunque no muy) es para anidar las sentencias switch:

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

utilizando la nueva sintaxis de matrices, esto se ve casi como lo que desea:

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

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