【问题标题】:PHP switch statement inside another switch statement另一个 switch 语句中的 PHP switch 语句
【发布时间】:2012-02-19 21:07:09
【问题描述】:

我有这种情况,我必须检查两个 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'];
    }
?>

这个代码示例运行良好,但是当我在我的服务器上实际使用这个过程时,即使它具有匹配的 case 值,该控件也会在父 switch 语句处被跳过为默认值。

没有报错,我只能调试到这个级别。

我知道您想查看代码,但我无法在此处发布。至少你可以指导我调试更多。

【问题讨论】:

  • 我没有看到父开关的 default 案例。你到底得到了什么输出?
  • 好吧,我没有在这里添加默认值,但我已经添加了真正的问题
  • 请在输入 URL 时发布 URL,此脚本失败。它应该解析 example.com?parent=child1 就好了。
  • 我似乎无法复制该问题:codepad.org/uoYT3WXS 尝试编辑键盘示例以复制您的问题。

标签: php switch-statement


【解决方案1】:

根据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; 
                                } 
                           } 
                    } 
                } 
        } 
    } 
?>

【讨论】:

  • 你知道为什么这个例子在文档中被否决了吗?
【解决方案2】:

我在您的代码中看不到任何错误。我在我的机器上试了一下,效果很好。因为它也适合你,所以错误大多在其他地方。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多