如何在 PHP 中使用 switch case 'or'

问题描述 投票:0回答:12

有没有办法在 PHP 开关中使用“OR”运算符或等效运算符?

例如,像这样:

switch ($value) {

    case 1 || 2:
        echo 'the value is either 1 or 2';
        break;
}
php switch-statement case
12个回答
566
投票
switch ($value)
{
    case 1:
    case 2:
        echo "the value is either 1 or 2.";
    break;
}

这称为“穿过”箱子块。该术语存在于大多数实现 switch 语句的语言中。


151
投票

如果您必须将

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

问题是,这两种方法在处理大型案例时都效率不高...想象一下

1
100
这将完美地工作

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

59
投票

我不会重新发布其他答案,因为它们都是正确的,但我只是补充一点,你不能使用 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
声明。


40
投票

尝试使用本文中的以下示例:[http://phpswitch.com/][1]

可能的开关盒:

(一)。 一个简单的 switch 语句

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

每个可能的选项都由 switch 语句中的一个 case 给出。

示例:

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

(二)。 分隔代码块

switch 的主要警告是每个案例都会运行到下一个案例,除非你用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;

(三)。 对多种情况使用失败

因为 switch 将继续运行代码直到找到中断,所以很容易采用失败的概念并在多个情况下运行相同的代码:

示例:

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

(四)。 高级切换:条件案例

PHP 的 switch 不仅仅允许您打开特定变量的值:您可以使用任何表达式作为 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;
}

我想这可以帮助你解决你的问题。

Php Switch 多个条件具有不同的语句,例如 if else if,但它只能检查条件浮点的相等性,但PHP Switch无法检查值。 例如:

{
Case condition 1:
statement(s)
Break;

Case condition 2:
statement(s)
Break;

Case condition 3:
statement(s)
Break;

Default :

statement(s)
} 




  [1]: http://phpswitch.com/

15
投票

尝试

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

12
投票

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

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

解释

就像您想要执行单个语句的值一样,您可以将其放在不带 break 的位置,就像直到或除非找到中断一样。它将继续执行代码,如果发现break,它将从switch案例中出来。


9
投票

匹配表达式 (PHP 8)

PHP 8 引入了 一个新的

match
表达式,与
switch
类似,但语法更短,并且存在以下差异:

  • 不需要
    break
    声明
  • 使用逗号组合条件
  • 返回一个值
  • 有严格的类型比较
  • 要求比较详尽(如果未找到匹配项,将抛出
    UnhandledMatchError

示例:

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

2
投票

请注意,您还可以使用闭包将 switch 的结果(使用早期返回)分配给变量:

$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 答案所示。


1
投票

使用此代码:

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

1 和 2 都调用该块。


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

-2
投票

http://php.net/manual/en/control-structs.switch.php 示例

$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
投票

最好的方法可能是 if else 和请求。此外,这可以更容易、更清晰地使用。

示例:

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

不要使用那些不能很好地与 PHP 配合使用的函数,尤其是当您在 HTML 中使用 PHP 时。

© www.soinside.com 2019 - 2024. All rights reserved.