2010-12-02 2 views
1

Я хотел бы превратить мой, если() условно для переключения() из этого:If() vs. 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']`? Действительно ли это логическое значение, или существует какая-то строка или целое число, которое неявно выбрано для bool в версии `if`? – NOtherDev 2010-12-02 20:17:48

+0

Конкретное программирование (PHP?), Которое вы используете, может быть важно здесь; а также описание того, как он ведет себя по-другому (может ли «разрыв», который был добавлен в цикл «foreach», будет изменяться в ожидаемом поведении?). – 2010-12-02 20:33:43

ответ

1

Я переформатировал ваш код, пожалуйста, проверьте, чтобы он по-прежнему был правильным.

Что касается вашей проблемы, для начала вам не потребуется инструкция break; в конце вашего заявления case true:. (break внутри цикла foreach просто вырывается из этого цикла, а не case).

Смежные вопросы