¿Hay alguna manera de usar un operador 'OR' o equivalente en un conmutador PHP?
Por ejemplo, algo como esto:
switch ($value) {
case 1 || 2:
echo 'the value is either 1 or 2';
break;
}
¿Hay alguna manera de usar un operador 'OR' o equivalente en un conmutador PHP?
Por ejemplo, algo como esto:
switch ($value) {
case 1 || 2:
echo 'the value is either 1 or 2';
break;
}
Respuestas:
Si debe usar ||
con switch
, puede probar:
$v = 1;
switch (true) {
case ($v == 1 || $v == 2):
echo 'the value is either 1 or 2';
break;
}
Si no, su solución preferida hubiera sido
switch($v) {
case 1:
case 2:
echo "the value is either 1 or 2";
break;
}
El problema es que ambos métodos no son eficientes cuando se trata de casos grandes ... imagine 1
que 100
esto funcionaría perfectamente
$r1 = range(1, 100);
$r2 = range(100, 200);
$v = 76;
switch (true) {
case in_array($v, $r1) :
echo 'the value is in range 1 to 100';
break;
case in_array($v, $r2) :
echo 'the value is in range 100 to 200';
break;
}
No volveré a publicar las otras respuestas porque todas son correctas, pero solo agregaré que no puede usar el interruptor para declaraciones más "complicadas", por ejemplo: para probar si un valor es "mayor que 3", " entre 4 y 6 ", etc. Si necesita hacer algo así, siga usando if
declaraciones, o si hay una necesidad particularmente fuerte, switch
entonces es posible usarlo de atrás hacia adelante:
switch (true) {
case ($value > 3) :
// value is greater than 3
break;
case ($value >= 4 && $value <= 6) :
// value is between 4 and 6
break;
}
pero como dije, personalmente usaría una if
declaración allí.
switch()
, y cuando estoy trabajando en un lenguaje C-ish realmente extraño tener Select Case
, lo cual es realmente una forma abreviada de decir "hay una gran bloque de if, else if, else-if ... here ".
you can't use switch for more "complicated" statements
es can't
o es shouldn't
? porque en su ejemplo ustedcan
switch (true)
cosas no es un caso de uso ordinario de interruptor.
Pruebe con los siguientes ejemplos en este artículo: http://phpswitch.com/
Posibles casos de interruptores:
(yo). Una simple declaración de cambio
La declaración de cambio es maravillosa y mágica. Es una parte del lenguaje que le permite seleccionar entre diferentes opciones para un valor y ejecutar diferentes partes de código según el valor establecido.
Cada opción posible viene dada por un caso en la declaración de cambio.
Ejemplo:
switch($bar)
{
case 4:
echo "This is not the number you're looking for.\n";
$foo = 92;
}
(ii) Delimitación de bloques de código
La advertencia principal del cambio es que cada caso se ejecutará en el siguiente, a menos que lo detenga con un descanso. Si el caso simple anterior se extiende para cubrir el caso 5:
Ejemplo:
case 4:
echo "This is not the number you're looking for.\n";
$foo = 92;
break;
case 5:
echo "A copy of Ringworld is on its way to you!\n";
$foo = 34;
break;
(iii) Uso de fallthrough para múltiples casos
Debido a que el conmutador seguirá ejecutando código hasta que encuentre un descanso, es bastante fácil tomar el concepto de fallthrough y ejecutar el mismo código para más de un caso:
Ejemplo:
caso 2:
case 3:
case 4:
echo "This is not the number you're looking for.\n";
$foo = 92;
break;
case 5:
echo "A copy of Ringworld is on its way to you!\n";
$foo = 34;
break;
(iv) Conmutación avanzada: casos de condición
El cambio de PHP no solo le permite cambiar el valor de una variable en particular: puede usar cualquier expresión como uno de los casos, siempre que le dé un valor para que el caso lo use. Como ejemplo, aquí hay un validador simple escrito usando el interruptor:
Ejemplo:
switch(true)
{
case (strlen($foo) > 30):
$error = "The value provided is too long.";
$valid = false;
break;
case (!preg_match('/^[A-Z0-9]+$/i', $foo)):
$error = "The value must be alphanumeric.";
$valid = false;
break;
default:
$valid = true;
break;
}
Creo que esto puede ayudarte a resolver tu problema.
Le sugiero que visite http://php.net/manual/en/control-structures.switch.php (manual)
switch ($your_variable)
{
case 1:
case 2:
echo "the value is either 1 or 2.";
break;
}
explicación
Al igual que para el valor de qué ejecutar una sola declaración, puede ponerlo sin interrupción como hasta o a menos que se encuentre una interrupción, continuará ejecutando el código y, si se encuentra una interrupción, saldrá de la caja del interruptor.
http://php.net/manual/en/control-structures.switch.php Ejemplo
$today = date("D");
switch($today){
case "Mon":
case "Tue":
echo "Today is Tuesday or Monday. Buy some food.";
break;
case "Wed":
echo "Today is Wednesday. Visit a doctor.";
break;
case "Thu":
echo "Today is Thursday. Repair your car.";
break;
default:
echo "No information available for that day.";
break;
}
La mejor manera podría ser, si no, con la solicitud. Además, esto puede ser más fácil y claro de usar.
Ejemplo:
<?php
$go = $_REQUEST['go'];
?>
<?php if ($go == 'general_information'){?>
<div>
echo "hello";
}?>
En lugar de usar las funciones que no funcionarán bien con PHP, especialmente cuando tienes PHP en HTML.