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

Php 检查是否在switch语句中设置了数组字段,php,arrays,switch-statement,Php,Arrays,Switch Statement,我设置了一个switch语句,用于检查数组字段中的值。如果数组没有具有该名称的字段,我还希望执行稍微不同的逻辑 我可以这样写代码,这很有效,但在我看来有点混乱: if (!isset($_GET['action'])) { require('menu.html'); } else { switch ($_GET['action']) { case 'debug': require('core/actions/debug.php');

我设置了一个
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
语句中移动逻辑,并将其与我的
开关
逻辑相结合


在JavaScript中,我可以将未定义的情况作为一种情况来处理:…。我可以在PHP中执行类似的操作吗?

如果
$\u GET['action']
为空,或者确实有值,但不是您想要的值,则可以执行此操作

switch ($_GET['action'])
{
    .............
    case "":
       echo "empty or not setted";
       break;
}
但是,如果未设置
$\u GET['action']
,它将在每次比较时抛出通知(但无论如何,它都将进入
案例“”

要不显示通知,可以执行以下操作:

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处理这种情况的最佳方法是做您已经在做的事情(在
开关之前检查var是否为
设置
。.case


这个问题很有趣,但如果是我,我会原封不动地离开,因为它可以很好地处理if/else语句。可能没有那么漂亮,但也不太复杂。啊,对了,我想在我的示例中使用
isset()
,而不是
empty()
。实际上,你可以将“超级开关疯狂方式”做得更好一点:@IQAndreas great way,添加到答案中。这一切都归功于你!
if (isset($_GET['action'])){
    switch ($_GET['action'])
    {
        .............
        case "":
           echo "empty";
           break;
    }
} else {
    echo "not setted";
}