如何在PHP中使用切换用例“或”


230

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

例如,如下所示:

switch ($value) {

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

Answers:


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

这称为“跌倒”情况下的案件。在大多数实现switch语句的语言中都存在该术语。


135

如果必须使用||with,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;
}

58

我不会重新发布其他答案,因为它们都是正确的,但我只是补充说,您不能对更多“复杂”的语句使用switch,例如:测试值是否“大于3”,“在4到6“之间,等等。如果您需要执行类似操作,请坚持使用using 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那儿使用声明。


1
很高兴看到您在这种情况下建议在开关()上使用if()。这种开关只会增加复杂性,IMO。
moo

1
是的,您必须有相当充分的理由才能选择这种样式,但是很高兴知道这是可能的。
尼克

2
我真的很高兴得知这一点。每次我用Basic-y语言构建项目时,都会想念C风格switch(),而当我使用C-ish语言来工作时,我真的很想念Have 风格Select Case,这实际上是表示“有很多东西if,else if,else-if ... here块”。
斯坦·罗杰斯

5
you can't use switch for more "complicated" statementscan't还是它shouldn't?因为在您的示例中,您can
Sharky

@Sharky他的意思是switch的普通用例无法做到。这种switch (true)事情不是交换机的普通用例。
陈李勇

37

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

可能的开关盒:

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

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

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

范例:

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

(ii)。分隔代码块

切换的主要警告是,每种情况都会继续进行到下一种情况,除非您暂停使用。如果将上述简单情况扩展为涵盖情况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会一直运行代码直到找到中断,所以很容易接受“失败”的概念并在多个情况下运行相同的代码:

范例:

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

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


您是否有示例(iv)的实际用例?
Pedro Moreira 2015年

15

尝试

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


1

使用此代码:

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

该块要求1和2。




-4

最好的方法可能是请求。而且,这可以更容易使用。

例:

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

而不是使用不适用于PHP的功能,尤其是当您使用HTML编写PHP时。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.