2011-07-05 12 views
5

¿es posible que una instrucción de cambio de PHP tome 2 argumentos? Por ejemplo:¿Puede una sentencia switch tomar dos argumentos?

switch (firstVal, secondVal){ 

    case firstVal == "YN" && secondVal == "NN": 
    thisDesc = "this is the outcome: YN and NN"; 
    break; 

    case firstVal == "YY" && secondVal == "NN": 
    thisDesc = "this is the outcome: YY and NN"; 
    break; 
} 

Muchas gracias, no he hecho PHP en años.

Respuesta

2

No, pero si su caso es tan simple como lo que tiene, simplemente concatenar las dos entradas y prueba para los valores concatenados:

switch ($firstval . $secondval) { 
case "YNNN": ... 
case "YYNN": ... 
} 
+0

Si bien parece una solución decente, tanto '$ firstval' como' $ secondval' tendrían que ser de una longitud o tipo predefinidos. Creo que lo que estoy tratando de decir es que si el primero es "Y" y el segundo es "NNN" y en otro caso el primero es "SÍ" y el segundo "NN", no hay forma de distinguirlos como el valor concatenado será "YNNN". –

+0

@Francois: puede introducir un separato para asegurarse de que los valores no estén mezclados. '$ firstVal. '|' . $ secondVal' y 'case 'YN | NN'' /' case' YY | NN'' (y así sucesivamente). – KingCrunch

+0

Lo sé, es por eso que puse el disclamer. Pero esto aún puede funcionar si conoce un char que no puede estar en ninguna de esas variables. Solo pega eso entre ellos. Sin embargo, no escala bien, reemplazar con bloques simples if/else es probablemente mejor a largo plazo. – Mat

0

Estoy bastante seguro de que no puede hacer eso, no solo en PHP sino en cualquier otro lenguaje de programación.

6

No, no se puede. A switch -statement como

switch ($a) { 
    case 1: 
    break; 
    case 2: 
    break; 
} 

que es efectivamente el mismo que

if ($a == 1) { 
} else if ($a == 2) { 
} 

Se puede utilizar una construcción ligeramente diferente

switch (true) { 
    case $firstVal == "YN" && $secondVal == "NN": 
    break; 
    case $firstVal == "YY" && $secondVal == "NN": 
    break; 
} 

que es equivalente a

if (true == ($firstVal == "YN" && $secondVal == "NN")) { 
} else if (true == ($firstVal == "YY" && $secondVal == "NN")) { 
} 

En algunos casos es mucho más legible en lugar de infinitas if-elseif-else -cadenas.

Cuestiones relacionadas