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;
}
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:
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.
Se você deve usar ||
com, switch
entã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 1
que 100
isso 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;
}
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 if
instruçõ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 if
declaração lá.
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 ".
you can't use switch for more "complicated" statements
é can't
ou é shouldn't
? porque no seu exemplo vocêcan
switch (true)
coisa não é um caso de uso comum de switch.
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.
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.
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;
}
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.