2010-12-02 10 views
1

If()vs switch() - 同じ意味ですが異なる動作ですか?

私は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; 
} 

私は同じであるべきだと思いますが...スイッチが正しく動作していない...

+2

'$ configuration ['application'] [$ applicationName] ['subdomain']'にはどのような種類のデータが格納されていますか?それは本当にブールか、あるいは 'if'バージョンで暗黙のうちにboolにキャストされる何らかの文字列か整数がありますか? – NOtherDev

+0

ここでは、使用している特定のプログラミング(PHP?)が重要な場合があります。 (foreachループに追加された 'break 'が期待された振る舞いの変化を引き起こす可能性がありますか?) –

+0

さて、私はphpと$ configuration ['application'] [$ applicationName] ['subdomain']をブーリアン(これは.iniから読み込み、boolに型キャストします)を使用しています...そして、事はforeachのコードは – jzvelc

答えて

1

私はあなたのコードを再フォーマットしました。まだ正しいかどうかを確認してください。

あなたの問題に関しては、case true:ステートメントの最後にbreak;というステートメントがありません。 (ループbreak内のループforeachループではなく、case自体)。

+0

これは面白いですが、私はブレークがスイッチを終了するべきだと思っていました(私はこれがC++で行われていると思います)...私の意図実際のセッションでセッションが設定されている場合は、スイッチを終了する必要があります。それ以外の場合はデフォルトのケースを継続してからブレークを実行する必要があります。 – jzvelc

+0

はい、フォーマットしたコードはまだ正しいです。 – jzvelc

+0

私はちょうどその問題がforeachループ内の中断であることを理解しました。これはうまくいきません...セッションがifステートメントで設定された後、セッションはデフォルトに戻り、問題を再設定します。 – jzvelc

関連する問題