Como usar um caso de opção 'ou' em PHP


230

Existe uma maneira de usar um operador 'OR' ou equivalente em um switch PHP?

Por exemplo, algo como isto:

switch ($value) {

    case 1 || 2:
        echo 'the value is either 1 or 2';
        break;
}

Respostas:


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

Isso é chamado "caindo através" do bloco do caso. O termo existe na maioria dos idiomas implementando uma instrução switch.


135

Se você deve usar ||com, switchentão você pode tentar:

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

Caso contrário, sua solução preferida teria sido

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

A questão é que ambos os métodos não são eficientes ao lidar com casos grandes ... imagine 1que 100isso funcionaria perfeitamente

$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;
}

58

Não vou repassar as outras respostas porque todas estão corretas, mas apenas acrescentarei que você não pode usar o switch para obter instruções mais "complicadas", por exemplo: para testar se um valor é "maior que 3", " entre 4 e 6 ", etc. Se você precisar fazer algo assim, use ifinstruções, ou se houver uma necessidade particularmente forte switch, é possível usá-lo de trás para frente:

switch (true) {
    case ($value > 3) :
        // value is greater than 3
    break;
    case ($value >= 4 && $value <= 6) :
        // value is between 4 and 6
    break;
}

mas como eu disse, eu pessoalmente usaria uma ifdeclaração lá.


1
Fico feliz em ver que você recomendou if () sobre switch () neste caso. Esse tipo de opção apenas adiciona complexidade, IMO.
moo

1
sim, você teria que ter um motivo bastante atraente para escolher esse estilo, mas é bom saber que é possível.
nickf

2
Estou realmente feliz por ter aprendido isso. Toda vez que construo um projeto em uma linguagem básica, sinto falta de um estilo C switch(), e quando estou trabalhando em uma linguagem C realmente sinto falta de ter Select Case, o que é realmente uma maneira abreviada de dizer "há uma grande bloco de if, else if, else-if ... here ".
Stan Rogers

5
you can't use switch for more "complicated" statementsé can'tou é shouldn't? porque no seu exemplo vocêcan
Sharky

@ Sharky, ele quis dizer que o caso de uso comum do switch não pode. esse tipo de switch (true)coisa não é um caso de uso comum de switch.
Chen Li Yong

37

Tente com os seguintes exemplos neste artigo: http://phpswitch.com/

Possíveis casos de comutação:

(Eu). Uma declaração de chave simples

A declaração do switch é maravilhosa e mágica. É uma parte do idioma que permite selecionar entre diferentes opções para um valor e executar diferentes partes do código, dependendo do valor definido.

Cada opção possível é fornecida por um caso na instrução switch.

Exemplo:

switch($bar)
{
    case 4:
        echo "This is not the number you're looking for.\n";
        $foo = 92;
}

(ii) Delimitando blocos de código

A principal advertência é que cada caso será executado no próximo, a menos que você pare com um intervalo. Se o caso simples acima for estendido para cobrir o caso 5:

Exemplo:

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 a descoberta para vários casos

Como o switch continuará executando o código até encontrar uma interrupção, é fácil adotar o conceito de avanço e executar o mesmo código em mais de um caso:

Exemplo:

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) Comutação avançada: casos de condição

O switch do PHP não permite apenas ativar o valor de uma variável específica: você pode usar qualquer expressão como um dos casos, desde que dê um valor para o caso. Como exemplo, aqui está um validador simples escrito usando switch:

Exemplo:

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;
}

Eu acho que isso pode ajudá-lo a resolver seu problema.


Você tem algum caso de uso do mundo real para o exemplo (iv)?
Pedro Moreira

15

Experimentar

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

9

Eu sugiro que você acesse 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;
}

explicação

Como para o valor que você deve executar em uma única instrução, você pode colocá-la sem interrupção, pois até ou a menos que seja encontrada uma interrupção, ele continuará executando o código e, se a interrupção for encontrada, sairá da caixa do comutador.


1

use este código:

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

o bloco pedia 1 e 2.


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

0

http://php.net/manual/en/control-structures.switch.php Exemplo

$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;

    }

-4

A melhor maneira pode ser se houver outra solicitação. Além disso, isso pode ser mais fácil e claro de usar.

Exemplo:

<?php 
$go = $_REQUEST['go'];
?>
<?php if ($go == 'general_information'){?>
<div>
echo "hello";
}?>

Em vez de usar as funções que não funcionam bem com PHP, especialmente quando você tem PHP em HTML.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.