php switch语句在另一个switch语句中

时间:2012-02-19 21:07:09

标签: php switch-statement

我有这种情况,我有两个检查GET变量 在语句中的一个switch语句中检查第一个之后, 必须在第一个case循环

中的第二个switch语句中检查第二个变量

我不能在这里发布确切的代码,但这是一个例子

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
switch($_GET['parent']){
    case 'child1':
        if(!isset($_GET['child'])){
            echo "Only parent";
        }
        else{
            switch($_GET['child']){
                case 'test':
                    echo 'test';
                    break;
            }
        }
        break;

    case 'child2':
        echo 'child2';
        break;
    default:
            echo $_GET['parent'];

}
?>

这个代码示例工作得很好但是当我在我的服务器上实际使用这个过程时, 即使具有匹配的大小写值

,控件也会在父开关语句处跳过默认值

没有报告错误,并且没有调试超过此级别

Plz帮助我!我知道你想看代码,但我不能在这里发布,至少你可以指导我调试更多。

由于

2 个答案:

答案 0 :(得分:32)

根据PHP Documentation Examples,如果包含嵌套开关的case块可以用大括号括起来。

关注mentioned example

<?php 
    switch ($argc) { 
        case 'home': { 
             print('This is $argc, home case.'); 
            break; 
        } 
        case 'subsection': { 
                switch ($argd) { 
                     case 'links': { 
                            switch($arge) { 
                                case 'display': { 
                                print('This is $arge, subsection,links,display case.'); 
                                break; 
                                } 
                           } 
                    } 
                } 
        } 
    } 
?>

答案 1 :(得分:2)

我在代码中看不到任何错误。我在我的机器上试过它并且工作正常。因为它也适合你,错误大多数在其他地方。

没有理由不能使用嵌套的switch语句,因为switch语句的定义如下:

switch($variable) {
  case "case1":
    [statement]
    break;
}

[statement]可以用简单命令替换,例如echo "test";,一系列命令echo "test"; echo "test";或其他switch语句。添加大括号不会改变任何东西,因为它们仅用于对一系列命令进行分组 - 因此可以在then等条件中为if([condition]) [then]部分使用多个命令。令人惊讶的是,上面的答案有18个错误地建议你添加大括号的upvotes,并没有改变任何东西。

总而言之,嵌套的switch语句是可能的,并且在代码示例中使用它们的方式是正确的。错误发生在其他地方。