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

例如,这样的东西:

switch ($value) {

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

当前回答

匹配表达式(PHP 8)

PHP 8引入了一个新的匹配表达式,它与switch类似,但语法更短,区别如下:

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

例子:

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

其他回答

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

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

匹配表达式(PHP 8)

PHP 8引入了一个新的匹配表达式,它与switch类似,但语法更短,区别如下:

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

例子:

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

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

例子:

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

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

Try

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

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

$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 match函数的目的,如_dom93 answer中所示。