Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement If()与switch()-意思相同但行为不同?_If Statement_Switch Statement - Fatal编程技术网

If statement If()与switch()-意思相同但行为不同?

If statement If()与switch()-意思相同但行为不同?,if-statement,switch-statement,If Statement,Switch Statement,我想将if()条件转换为switch(),如下所示: if($configuration['application'][$applicationName]['subdomain'] == true){ foreach($configuration['language'] as $language){ if($language['abbreviation'].'.'.$configuration['application'][$applicationName]['domai

我想将if()条件转换为switch(),如下所示:

if($configuration['application'][$applicationName]['subdomain'] == true){
    foreach($configuration['language'] as $language){
        if($language['abbreviation'].'.'.$configuration['application'][$applicationName]['domain'] == $_SERVER['HTTP_HOST']){
            $_SESSION['language'] = $language['abbreviation'];
        }
    }

    // If no subdomain detected and redirection is enabled, set default language
    if(!isset($_SESSION['language'])){
        $_SESSION['language'] = $configuration['application'][$applicationName]['language'];
    }
}
else {
    $_SESSION['language'] = $configuration['application'][$applicationName]['language'];
}
为此:

switch($configuration['application'][$applicationName]['subdomain']){
    case true:
        foreach($configuration['language'] as $language){
            if($language['abbreviation'].'.'.$configuration['application'][$applicationName]['domain'] == $_SERVER['HTTP_HOST']){
                $_SESSION['language'] = $language['abbreviation'];
                break;
            }
        }
    default:
        $_SESSION['language'] = $configuration['application'][$applicationName]['language'];
        break;
}
我认为它应该是一样的,但它的行为不同。。。
开关工作不正常…

我已重新格式化了您的代码,请检查以确保它仍然正确


至于你的问题,首先你缺少了一个
中断大小写true:
语句末尾的code>语句。(foreach循环中的
中断
只是从该循环中断,而不是
案例本身)。

我已重新格式化了您的代码,请检查以确保它仍然正确


至于你的问题,首先你缺少了一个
中断大小写true:
语句末尾的code>语句。(foreach
循环中的
中断
只是从该循环中中断,而不是
案例本身)。

$configuration['application'][$applicationName]['subdomain']中存储的数据类型是什么?它真的是布尔型的,还是存在某种字符串或整数,在
if
版本中隐式地转换为布尔型的?您使用的特定编程(PHP?)在这里可能很重要;另外,还描述了它的行为到底是如何不同的(添加到
foreach
循环的
break
是否会导致您的预期行为发生变化?)。我使用的是php,$configuration['application'][$applicationName]['subdomain']是布尔型的(从.ini读取并键入bool)。。。问题是foreach中的代码被执行,默认值也被执行(break并没有真正中断开关?)在
$configuration['application'][$applicationName]['subdomain']
中存储了什么类型的数据?它真的是布尔型的,还是存在某种字符串或整数,在
if
版本中隐式地转换为布尔型的?您使用的特定编程(PHP?)在这里可能很重要;另外,还描述了它的行为到底是如何不同的(添加到
foreach
循环的
break
是否会导致您的预期行为发生变化?)。我使用的是php,$configuration['application'][$applicationName]['subdomain']是布尔型的(从.ini读取并键入bool)。。。问题是,foreach中的代码被执行,默认值也被执行(break并没有真正中断开关?)这很有趣,我认为break应该退出开关(我认为这是在c++中完成的方式)。。。我的意图是,如果会话设置为true case,它应该退出开关,否则它应该继续使用默认case,然后执行中断…我刚刚发现问题在于foreach循环中的中断。它就是不起作用。。。在if语句中设置会话后,它将继续默认设置并再次设置会话,这就是问题所在。@jzvelc:yep,这就是为什么我提到您需要另一个
中断语句,否则您将陷入下一个条件:)是的,但我的观点是,foreach中的id条件失败,它应该继续默认,否则不会(或者如果配置设置为false)好吧,这很有趣,我认为break应该退出开关(我认为这是在c++中完成的方式)。。。我的意图是,如果会话设置为true case,它应该退出开关,否则它应该继续使用默认case,然后执行中断…我刚刚发现问题在于foreach循环中的中断。它就是不起作用。。。在if语句中设置会话后,它将继续默认设置并再次设置会话,这就是问题所在。@jzvelc:yep,这就是为什么我提到您需要另一个
中断语句,否则您将陷入下一个条件:)是的,但我的观点是foreach中的id条件失败,它应该继续默认,否则不会(或者如果config设置为false)