使用PHP switch语句执行多种情况

问题描述 投票:6回答:6

例如,我必须基于一个值执行多组指令。

$value = 'AA';
switch ($value) {
    case 'AA':
        echo "value equals  1";
    continue;
    case 'BB':
        echo "value equals 2";
    continue;
    case 'CC' || 'AA':
        echo "value equals 3";
    break;
}

我从上面的代码中期望的是,它应该基于传递的值来执行多种情况,变量$ value包含AA作为值,因此我希望它能够同时执行这两项

case 'AA'case 'CC' || 'AA'

因此它应该打印出value equals 1 value equals 3,但是它不会以我只获得value equals 1作为输出的方式执行它。如果我从语句中删除continue,它将执行所有三个cases,这在逻辑上是错误的。 PHP的switch语句是否支持基于单个值执行多种情况?有什么解决方法吗?

谢谢..

php switch-statement
6个回答
12
投票

[缺少break时,则可以使用switch语句进入下一个条件:

$value = 'AA';
switch ($value) {
    case 'AA':
        echo "value equals  1"; // this case has no break, enables fallthrough
    case 'CC':
        echo "value equals 3"; // this one executes for both AA and CC
    break;
    case 'BB':
        echo "value equals 2";
    break;
}

3
投票

switch语句在case块中需要文字。请使用if语句。

您可以使用其他种类的循环来遍历iterate的值,然后使用IF进行比较。在switch情况下,无法进行比较/条件检查。

完成您想要做的事情的一种方法是这样的(注意使用了IF):

$value = 'AA';
switch($value)
{
    case ('AA'):
        echo "value equals 1<br />";
    case ('BB'):
        if ($value == 'BB'){
            echo "value equals 2<br />";
        }
    case (('AA') || ('CC')):
        echo "value equals 3<br />";
        break;
}

输出:

value equals 1
value equals 3

注意:-上面的解决方案虽然输出了您需要的东西,但它不是正确的解决方案,但我建议您避免使用,但它并不正确。您可以使用非切换/案例替代方案轻松解决您的需求。


1
投票

解决方法是使用一组ifelse if语句。 case语句中的条件不评估。

if($value == 'AA') {
    echo "value equals 1";
}
else if($value == 'CC') {
    echo "value equals 3";
}
else { //Or else if($value == 'BB') if you might add more at some point
    echo "value equals 2";
}

[continue(或break语句)结束每个case。如果省略,执行将一直执行到下一个case(这就是在您的情况下全部三个都执行的原因-它贯穿所有这些,直到结尾。如果遇到continuebreak在已经掉入的case中,执行将在那里停止)。


0
投票

阅读文档后,我发现switch语句可以包含多个判断为true的情况,但不能包含多个判断为true的情况。

此外,文档指出break;范围内的continue;switch是等效的。

如果忽略所有break;continue;语句,则会看到它们全部打印出来,而不管它们是否匹配。对于这个难题,您将不得不使用不太酷的if / else / ifelse语句。

http://php.net/manual/en/control-structures.switch.php


0
投票

您需要这样编写代码当我们检查多个条件时,我们需要在其中添加条件语句。

$value = 'AA';
switch ($value) {
    case 'AA':
        echo "value equals  1";
    continue;
    case 'BB':
        echo "value equals 2";
    continue;
    case $value == 'CC' || $value=='AA':
        echo "value equals 3";
    break;
}

或者您可以简单地以这种格式编写代码(为此设置两种不同的情况)

$value = 'AA';
switch ($value) {
    case 'AA':
        echo "value equals  1";
    continue;
    case 'BB':
        echo "value equals 2";
    continue;
    case 'CC':
    case 'AA':
        echo "value equals 3";
    break;
}

0
投票
$value = 'AA';
switch ($value) {
    case 'AA':
        echo "value equals 1";
        echo "value equals 3";
    break;
    case 'BB':
        echo "value equals 2";
    break;
    case 'CC':
        echo "value equals 3";
    break;
}
© www.soinside.com 2019 - 2024. All rights reserved.