如何使用开关盒'或'在PHP中

是否有一种方法使用'OR'操作符或等价的PHP开关?

例如,这样的东西:

switch ($value) {


case 1 || 2:
echo 'the value is either 1 or 2';
break;
}
318007 次浏览
switch ($value)
{
case 1:
case 2:
echo "the value is either 1 or 2.";
break;
}

这就是所谓的“穿过”案例块。这个术语存在于大多数实现switch语句的语言中。

试一试

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

我不会转发其他答案,因为它们都是正确的,但我只想补充一点,你不能对更“复杂”的语句使用switch,例如:测试一个值是否“大于3”,“在4和6之间”,等等。如果你需要这样做,坚持使用if语句,或者如果对switch有特别强烈的需求,那么可以从后往前使用它:

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

但如我所说,我个人会在那里使用if语句。

最好的办法可能是如果其他请求。此外,这可以更容易和清楚地使用。

例子:

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

而不是使用不适合PHP的函数,尤其是在HTML中使用PHP时。

如果你必须使用||switch,那么你可以尝试:

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

如果不是,你更喜欢的解决方案是

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

问题是这两种方法在处理大型案件时效率都不高。想象1100,这将完美地工作

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

使用以下代码:

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

1和2都调用该块。

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

我建议你通过switch(手动)。

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

解释

就像你想要执行单个语句的值一样,你可以不带打破,因为找到了until或unless break。它将继续执行代码,如果找到打破,它将从开关情况中出来。

试试本文中下面的例子

可能的切换案例:

(我)简单的开关语句

switch语句是奇妙而神奇的。它是语言的一部分,允许您在值的不同选项之间进行选择,并根据设置的值运行不同的代码段。

每个可能的选项都由switch语句中的大小写给出。

例子:

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

(2) 分隔码块 .

switch的主要警告是,每个case都会运行到下一个case,除非你用break停止它。如果将上面的简单情况扩展到情况5:

例子:

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;

(3) 对多个情况使用fallthrough

因为switch会一直运行代码,直到它找到一个断点,所以我们很容易就可以采用fallthrough的概念,在多个情况下运行相同的代码:

例子:

案例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)

PHP的开关不仅允许您打开特定变量的值:您可以使用任何表达式作为case之一,只要它为case提供了要使用的值。举个例子,下面是一个使用switch编写的简单验证器:

例子:

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

我想这也许能帮你解决问题。

http://php.net/manual/en/control-structures.switch.php 示例< / p >

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


}

匹配表达式(PHP 8)

PHP 8 介绍了一个新的match表达式,它类似于switch,但语法更短,区别如下:

  • 不需要break语句
  • 使用逗号组合条件
  • 返回一个值
  • 具有严格的类型比较
  • 要求比较是穷尽的(如果没有找到匹配,将抛出UnhandledMatchError)

例子:

match ($value) {
0 => '0',
1, 2 => "1 or 2",
default => "3",
}

注意,你也可以使用闭包将开关的结果(使用早期返回)赋值给一个变量:

$otherVar = (static function($value) {
switch ($value) {
case 0:
return 4;
case 1:
return 6;
case 2:
case 3:
return 5;
default:
return null;
}
})($i);

当然,这种方法已经过时了,因为这正是新PHP 8 匹配功能的目的,如_dom93答案所示。