PHP - Duda con estructura de un Switch en PHP

 
Vista:
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda con estructura de un Switch en PHP

Publicado por Alejandro (172 intervenciones) el 04/06/2020 14:07:23
Hola buenos dias,

vereis me ha surgido una duda programando en PHP. Resulta que tengo el siguiente switch:


1
2
3
4
5
6
7
8
9
switch ($variable1 && $variable2){
 
        case ($variable1="valor" && $variable2="valor"):
 
                 //Se ejecuta algo
 
       break;
 
}


Mi duda es si se podria hacer esto:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch ($variable1 && $variable2){
 
        case "valorVariable1":
 
                 //Se ejecuta algo
 
       break;
 
       case "valorVariable2":
 
              //Se ejecuta otra cosa
 
       break;
 
}

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda con estructura de un Switch en PHP

Publicado por Julio (830 intervenciones) el 04/06/2020 14:49:14
Hola.

Eso no está bien, pero es que, sin haberlo probado, te diría que ninguno de los dos códigos está bien.

Con switch evalúas los posibles valores de una variable o, como pones, de $variable1 && $variable2, lo cual sólo te dará en este caso dos opciones: true o false. Por tanto, con esa construcción sólo podrías hacer esto:

1
2
3
4
5
6
7
8
switch ($variable1 && $variable2) {
    case true:
        // código
        break;
    case false:
        / código
        break;
}

Esto que haces aquí:

1
case ($variable1="valor" && $variable2="valor")

No funciona como esperas. Te entrará porque esa expresión te devolverá true, entonces te entrará cuando $variable1 && $variable2 devuelva true, pero nada tiene que ver el valor que ahí le pongas. Además, fíjate que estás asignando los valores, no estás comprobando que sean iguales (que sería con == o con ===), con lo que aún es más erróneo.

El segundo caso que pones falla aún más. Y es que switch no funciona así, sino que evalúa una expresión (como un if) y, dependiendo de su resultado, hace una u otra cosa. Ya te digo que en tu ejemplo sólo podrías tener true o false, pero por ejemplo imagina que tienes un número aleatorio:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$aleatorio = rand(1, 10);
switch ($aleatorio) {
    case 1:
        // código
        break;
    case 2:
        // código
        break;
    case 3:
        // código
        break;
    case 4:
        // código
        break;
    case 5:
        // código
        break;
    case 6:
        // código
        break;
    case 7:
        // código
        break;
    case 8:
        // código
        break;
    case 9:
        // código
        break;
    case 10:
        // código
        break;
}

Eso es lo que hace switch. Evalúa lo que le pasas y en función del resultado hace una cosa u otra.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda con estructura de un Switch en PHP

Publicado por Alejandro (172 intervenciones) el 04/06/2020 15:07:31
Primero, lo de los iguales ha sido una errata, queria poner doble igual.

Entonces en vez hacerlo asi:

1
2
3
4
5
6
7
8
9
switch ($variable1 && $variable2){
 
        case ($variable1=="valor" && $variable2=="valor"):
 
                 //Se ejecuta algo
 
       break;
 
}

Seria así?

1
2
3
4
5
6
7
8
9
switch ($variable1 && $variable2){
 
        case "valor1" && "valor2":
 
                 //Se ejecuta algo
 
       break;
 
}

En el segundo caso, en vez de el valor, tendria que poner true o false???

Gracias por la pronta respuesta ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda con estructura de un Switch en PHP

Publicado por Julio (830 intervenciones) el 04/06/2020 15:44:26
No no, no me habré explicado bien. Switch evalúa una expresión y case contiene uno de los posibles resultados. No puedes ponerle otra expresión en case. Si la expresión que estás evaluando devuelve true o false, tus únicos case disponibles son true o false.

Lo que tú estás haciendo sólo se puede hacer así:

1
2
3
4
5
6
7
8
switch ($variable1 == 'valor1' && $variable1 == 'valor2') {
    case true:
        // Código en el caso que la expresión sea cierta
        break;
    case false:
        // Código en el caso que la expresión sea falsa
        break;
}

Pero es que switch no se utiliza para esto. Eso lo puedes hacer con un simple if ($variable1 == 'valor1' && $variable1 == 'valor2') que te entrará cuando sea true y un else para cuando sea false.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 14 puestos en PHP (en relación al último mes)
Gráfica de PHP

Duda con estructura de un Switch en PHP

Publicado por Andres (157 intervenciones) el 04/06/2020 19:23:17
Si lo puedes hacer, pero tienes la restricción de que el switch va a evaluar la primera condición dentro de los cases. Usando el ejemplo que usas, sería algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
$variable1="valor";
$variable2="valor2";
 
switch ($variable1 && $variable2){
 
    case $variable1=="valor":
        echo "Aquiii";
    break;
    case $variable2=="valor2":
        echo "aquii222";
    break;
 
}


De esta manera el codigo solo imprime "Aquiii" a pesar de que la variable2 tambien cumple la condición de tener el valor "valor2". Ahora, si quieres que haga algo cuando una de las dos condiciones coincida, simplemente eliminas el break:

1
2
3
4
5
6
7
8
9
10
$variable1="valor";
$variable2="valor2";
 
switch ($variable1 && $variable2){
    case $variable1=="valor":
    case $variable2=="valor2":
        echo "aquii222";
    break;
 
}

En palabras de if es lo mismo que tener

1
if($variable1=="valor" || $variable2=="valor2") { echo "aquii222"; }



Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda con estructura de un Switch en PHP

Publicado por Julio (830 intervenciones) el 04/06/2020 22:52:18
En el segundo caso, ¿no entraría igualmente si $variable1 es igual a "valor" independientemente del valor que tenga $variable2? Por eso lo veo poco útil, si no me equivoco.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con estructura de un Switch en PHP

Publicado por Andres (157 intervenciones) el 04/06/2020 23:35:39
Sí entra, por eso lo indico: "...cuando una de las dos condiciones coincida..."

La utilidad la tendrá Alejandro en su lógica de programación. Importa que él entienda el concepto y las diferencias, creo que por eso hacia la pregunta inicial.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda con estructura de un Switch en PHP

Publicado por Julio (830 intervenciones) el 05/06/2020 08:43:37
Mmmm, pues acabo de probar esto y funciona. Curiosa forma de usarlo, pero sí, funciona como debe (bueno, "casi" como debe, luego explico un fallo). Una cosa más que no sabía, jaja:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function comprobarCoincidencia($variable1, $variable2) {
	switch ($variable1 && $variable2) {
		case $variable1 == 'valor1' && $variable2 == 'valor2':
			echo 'Ambas variables coinciden con valor1 y valor2<br>';
			break;
		case $variable1 == 'valor1' && $variable2 != 'valor2':
			echo 'Sólo $variable1 coincide con valor1<br>';
			break;
		case $variable1 != 'valor1' && $variable2 == 'valor2':
			echo 'Sólo $variable2 coincide con valor2<br>';
			break;
		case $variable1 != 'valor1' && $variable2 != 'valor2':
			echo 'Ninguna variable coincide con valor1 y valor2<br>';
			break;
	}
}
 
comprobarCoincidencia('valor1', 'valor2');
comprobarCoincidencia('valor1', 'otro valor');
comprobarCoincidencia('otro valor', 'valor2');
comprobarCoincidencia('otro valor', 'otro valor');

Imprime por pantalla lo esperado:

1
2
3
4
Ambas variables coinciden con valor1 y valor2
Sólo $variable1 coincide con valor1
Sólo $variable2 coincide con valor2
Ninguna variable coincide con valor1 y valor2

Claro, la lógica es un poco "extraña". El switch sólo evalúa si es TRUE o si es FALSE. En este caso, como ambas variables están definidas, $variable1 && $variable2 va a devolver TRUE sí o sí. Luego en los case hay cuatro, pero como hay evaluaciones en cada case, habrá sólo un case que será TRUE y tres case que serán FALSE. Como la evaluación siempre es TRUE y sólo hay un case con valor TRUE, entonces funciona y entra sólo en la que se requiere.

Ojo, esto debe FALLAR cuando queremos evaluar el FALSE, pues al haber tres case con valor FALSE, entraría en el primero que encontrara y quizá no mostrara lo que quisiéramos. O sea, funciona si buscas siempre el TRUE, falla si en algún momento buscas el FALSE al haber más de uno.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 336
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Duda con estructura de un Switch en PHP

Publicado por Alejandro (172 intervenciones) el 05/06/2020 14:47:26
El primer ejemplo me funciona perfecto. Es una forma de usar el switch, igual no es la apropiada pero desde luego funciona, y me sirve para utilizar de manera flexible el switch, a parte de que switch es mas facil de leer en el codigo y es mas rapido que IF..

Probare el segundo ejemplo a ver que pasa y os comento.

Gracias por las respuestas ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar