如何在PHP中使用switch case'或'?

220 php case switch-statement

有没有办法在php开关中使用'OR'运算符或等效运算符?例如,像这样:

switch ($value) {

    case 1 || 2:
        echo 'the value is either 1 or 2';
        break;
}
Run Code Online (Sandbox Code Playgroud)

小智 489

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

这被称为"通过"案件块.该术语存在于实现switch语句的大多数语言中.


Bab*_*aba 130

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

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

如果不是你的首选解决方案

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

问题是,大案件时既方法效率不高......想象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;
}
Run Code Online (Sandbox Code Playgroud)

  • `switch (true)` 是一种反模式,它消除了 switch 块的唯一好处——单一评估。相反,需要评估每种情况,并且所有“break”调用都会生成一个详细的片段。我永远不会在专业项目中使用这种反模式。 (2认同)

nic*_*ckf 56

我不会重新发布其他答案,因为它们都是正确的,但我只是补充一点,你不能将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;
}
Run Code Online (Sandbox Code Playgroud)

但正如我所说,我个人在if那里使用一份声明.

  • `你不能使用开关来获得更多"复杂"的陈述`它是"不能"还是"不应该"?因为在你的例子中你可以` (5认同)
  • 很高兴看到您在这种情况下推荐了 if() 而不是 switch()。这种开关只会增加复杂性,IMO。 (2认同)
  • 我很高兴能够学到这一点.每次我用Basic-y语言构建一个项目时,我都会想念一个C风格的`switch()`,当我用C-ish语言工作时,我真的很想念`Select Case`,这真的很棒一种速记的方式,说"如果,如果,否则 - 如果......在这里有一大块". (2认同)

Joh*_*ter 36

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

可能的开关案例:

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

切换声明是神奇而神奇的.它是一种语言,允许您在值的不同选项之间进行选择,并根据设置的值运行不同的代码片段.

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

示例:

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

(ⅱ).划分代码块

切换的主要警告是每个案例都会进入下一个案例,除非你以休息方式停止它.如果上述简单案例扩展到案例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;
Run Code Online (Sandbox Code Playgroud)

(三).对多个案例使用fallthrough

因为switch会一直运行代码直到找到中断,所以很容易采用fallthrough的概念并为多个case运行相同的代码:

示例:

案例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;
Run Code Online (Sandbox Code Playgroud)

(ⅳ).高级切换:条件案例

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;
}
Run Code Online (Sandbox Code Playgroud)

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


Cra*_*aig 15

尝试

switch($value) {
    case 1:
    case 2:
        echo "the value is either 1 or 2";
        break;
}
Run Code Online (Sandbox Code Playgroud)


小智 9

我建议你通过 http://php.net/manual/en/control-structures.switch.php(手册)

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

说明

就像你要执行单个语句的值一样,你可以把它放在没有中断的地方,直到或除非发现中断它将继续执行代码,如果发现break,它将从switch case中出来.


t_d*_*m93 6

匹配表达式 (PHP 8)

PHP 8 RFC引入了一个match类似于switch但语法更短的新表达式:

  • 不需要break陈述
  • 使用逗号组合条件
  • 返回一个值

例子:

match ($value) {
  0 => '0',
  1, 2 => "1 or 2",
  default => "3",
}
Run Code Online (Sandbox Code Playgroud)

  • 也就是说,这个页面提供了一个很好的机会来推广 PHP 中奇妙的、现代的、替代的功能。 (4认同)