2008-10-16 12 views

Respuesta

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

Esto se conoce como "cayendo a través de" el bloque caso. El término existe en la mayoría de los lenguajes que implementan una instrucción switch.

13

Trate

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

No voy a volver a publicar las otras respuestas porque son los correctos, pero sólo voy a añadir que no se puede utilizar el interruptor para más declaraciones "complicado", por ejemplo: a pruebe si un valor es "mayor que 3", "entre 4 y 6", etc. Si necesita hacer algo como eso, siga las instrucciones if, o si hay una necesidad particularmente fuerte de switch, entonces es posible usarlo al revés:

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 ya he dicho, utilizaría personalmente un if declaración allí.

+1

Me alegro de que haya recomendado si() sobre el interruptor() en este caso. Este tipo de cambio solo agrega complejidad, IMO. – moo

+1

Sí, tendrías que tener una razón bastante convincente para elegir este estilo, pero es bueno saber que es posible. – nickf

+2

Estoy realmente contento de haber aprendido esto.Cada vez que construyo un proyecto en un lenguaje Basic-y, echo de menos tener un '' switch() 'de estilo C, y cuando estoy trabajando en un lenguaje C-ish realmente extraño tener' Select Case', que es realmente una manera taquigráfica de decir "hay un gran bloque de si, si no, si ... si ... aquí". –

-2

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 utilizar las funciones que no funcionan bien con PHP, especialmente cuando se tiene PHP en HTML.

+4

¿cómo es eso más claro que una instrucción switch? –

97

Si tiene que usar || con switch entonces puede intentar:

$v = 1; 
switch (true) { 
    case ($v == 1 || $v == 2): 
     echo 'the value is either 1 or 2'; 
     break; 
} 

Si no es su solución preferida habría sido

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

La cuestión es que tanto el método no es eficiente cuando se trata de casos grandes ... imagine 1 a 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; 
} 
1

uso este código:

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

el bloque llamado para ambos 1 y 2.

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

le sugiero que vaya a través de 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 el valor de lo que se debe ejecutar declaración simple puede ponerlo sin interrupción como como hasta que, a menos que se encuentre break, continuará ejecutando el código y si se encuentra break, saldrá de la caja del switch.

33

intento con estos ejemplos siguientes en este artículo: http://phpswitch.com/

posible cambio de iPhone:

(i). Una declaración simple interruptor

La sentencia switch es maravilloso y mágico. Es una parte del lenguaje que le permite seleccionar entre diferentes opciones para un valor y ejecutar diferentes piezas de código según el valor que se establezca.

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). bloques de código Delimitación

La principal advertencia del interruptor es que cada caso se ejecutará en en el siguiente, a menos que lo pare con rotura de puente. Si el caso simple de arriba se extiende para cubrir 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). Usando fallthrough para múltiples casos

Debido interruptor mantendrá la ejecución de código hasta que encuentra un descanso, es bastante fácil de llevar 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 Condición

interruptor de PHP no solo permiten cambiar el valor de una variable en particular: se puede usar cualquier expresión como uno de los casos, siempre y cuando se da un valor para el caso de usar. A modo de ejemplo, he aquí una sencilla validador escrito con 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 ayudar a resolver su problema.

+0

¿Tiene algún caso de uso del mundo real para el ejemplo (iv)? –

+0

No, no tenía ahora @PedroMoreira –

Cuestiones relacionadas