254

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

例如,像这样:

switch ($value) {

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

12 回答 12

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

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

于 2008-10-16T00:26:55.370 回答
146

如果您必须使用||withswitch那么您可以尝试:

$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;
}
于 2012-11-29T20:31:35.587 回答
58

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

于 2008-10-16T01:55:55.657 回答
39

在本文中尝试以下示例:http: //phpswitch.com/

可能的开关情况:

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

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

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

例子 :

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

(二)。分隔代码块

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;

(iii)。对多个案例使用失败

因为 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;

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

PHP 的开关不仅允许您打开特定变量的值:您可以使用任何表达式作为其中一种情况,只要它为要使用的情况提供值。例如,这是一个使用 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;
}

我认为这可以帮助您解决问题。

于 2012-12-06T06:17:15.277 回答
15

尝试

switch($value) {
    case 1:
    case 2:
        echo "the value is either 1 or 2";
        break;
}
于 2008-10-16T00:27:41.483 回答
10

我建议你通过开关(手动)。

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

解释

就像您要为其执行单个语句的值一样,您可以将它放在没有中断的情况下,就像直到或除非找到中断一样。它将继续执行代码,如果发现中断,它将从开关盒中出来。

于 2012-12-05T14:51:36.780 回答
6

匹配表达式 (PHP 8)

PHP 8引入了一个新的match表达式,它类似于switch但具有更短的语法和以下区别:

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

例子:

match ($value) {
  0 => '0',
  1, 2 => "1 or 2",
  default => "3",
}
于 2020-11-26T17:20:04.703 回答
1

使用此代码:

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

块被调用为 1 和 2。

于 2012-12-03T10:17:14.580 回答
1

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

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

当然,这种做法已经过时,因为这正是_dom93答案中指出的新 PHP 8匹配函数的目的。

于 2020-12-04T17:42:11.803 回答
0
switch ($value) 
{
   case 1:
   case 2:
      echo 'the value is either 1 or 2';
   break;
}
于 2012-12-05T06:46:39.750 回答
-2

http://php.net/manual/en/control-structures.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;

    }
于 2018-04-03T07:39:27.887 回答
-4

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

例子:

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

而不是使用不能很好地与 PHP 一起工作的函数,尤其是当您在 HTML 中使用 PHP 时。

于 2011-06-11T01:14:48.553 回答