检查是否在switch语句中设置了数组字段

时间:2014-08-19 00:14:53

标签: php arrays switch-statement

我设置了switch语句,用于检查数组字段中的值。如果数组没有具有该名称的字段,我还想执行稍微不同的逻辑。

我可以编写像这样的代码,但这看起来有些混乱:

if (!isset($_GET['action']))
{
    require('menu.html');
}
else
{
    switch ($_GET['action'])
    {
        case 'debug':
            require('core/actions/debug.php');
            break;
        case 'submit':
            require('core/actions/submit.php');
            break;
        case 'admin':
            header("Location: /login");
            break;
    }
}

但我是否可以从if语句中移出逻辑并将其与我的switch逻辑相结合?

在JavaScript中,我只能将case undefined: ...作为其中一个案例。我可以在PHP中做类似的事情吗?

1 个答案:

答案 0 :(得分:0)

如果$_GET['action']为空,或者确实有值,但它不是您想要的任何值,则可以执行此操作。

switch ($_GET['action'])
{
    .............
    case "":
       echo "empty or not setted";
       break;
}

但如果未设置$_GET['action'],则会在每次比较时抛出通知(但无论如何都会输入case '')。

不显示您可以执行的通知:

switch (@$_GET['action'])

但是,请不要这样做!

你也可以采用超级开关疯狂的方式:

switch(true){
    case !empty($_GET['action']):
            switch ($_GET['action'])
            {
                 .............
            }
        break;
   default:
      echo "not setted or empty";
      break;
}

编辑:

正如@IQAndreas在评论中指出的那样,利益解决方案可能是:

switch (true)
{
    case (!isset($_GET['action']):
        require('menu.html');
        break;
    case ($_GET['action'] == 'debug'):
        require('core/actions/debug.php');
        break;
    case ($_GET['action'] == 'submit'):
        require('core/actions/submit.php');
        break;
    case ($_GET['action'] == 'admin'):
        header("Location: /login");
        break;
}

但IMO处理这种情况的最佳方式是做你正在做的事情(在empty之前检查var是setted还是switch..case

if (isset($_GET['action'])){
    switch ($_GET['action'])
    {
        .............
        case "":
           echo "empty";
           break;
    }
} else {
    echo "not setted";
}