Cómo usar una caja de interruptor 'o' en PHP

230

¿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;
}
Peter Mortensen
fuente

Respuestas:

505
switch ($value)
{
    case 1:
    case 2:
        echo "the value is either 1 or 2.";
    break;
}

Esto se llama "caída" del bloque de casos. El término existe en la mayoría de los idiomas que implementan una declaración de cambio.

Comunidad
fuente
135

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 1que 100esto 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;
}
Baba
fuente
58

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 ifdeclaraciones, o si hay una necesidad particularmente fuerte, switchentonces 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 ifdeclaración allí.

nickf
fuente
1
Me alegra ver que recomendó if () sobre switch () en este caso. Este tipo de cambio solo agrega complejidad, IMO.
MOO el
1
Sí, tendrías que tener una razón bastante convincente para elegir este estilo, pero es bueno saber que es posible.
nickf
2
De hecho, me alegro de haber aprendido esto. Cada vez que construyo un proyecto en un lenguaje Basic-y, extraño tener un estilo C 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 ".
Stan Rogers
55
you can't use switch for more "complicated" statementses can'to es shouldn't? porque en su ejemplo ustedcan
Sharky
@Sharky quiso decir que el caso de uso ordinario del interruptor no puede. Este tipo de switch (true)cosas no es un caso de uso ordinario de interruptor.
Chen Li Yong el
37

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.

John Peter
fuente
¿Tiene algún caso de uso del mundo real para el ejemplo (iv)?
Pedro Moreira
15

Tratar

switch($value) {
    case 1:
    case 2:
        echo "the value is either 1 or 2";
        break;
}
Craig
fuente
9

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.

Abhishek Jaiswal
fuente
1

usa este código:

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

el bloque requería tanto 1 como 2.

RaJeSh
fuente
1
switch ($value) 
{
   case 1:
   case 2:
      echo 'the value is either 1 or 2';
   break;
}
Tapas Pal
fuente
0

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;

    }
Md Nazrul Islam
fuente
-4

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.

ahmed
fuente