2015-08-30 79 views
1

我想寫一些PHP代碼來返回基於兩個參數的翻譯:整數翻譯ID和雙字母語言代碼。可能使用switch語句在PHP中比較字符串?

對於這一點,我嵌套switch語句。外部開關工作正常,但內部開關失敗,並且總是返回它們的默認值,無論$ lang參數的值如何。在下面的例子中,當$ lang =「de」時返回「Berne」。

我查了一下,是$ LANG的值是正確的;它是。 鑄造$ lang as(字符串)以確保它是正確的類型。 試圖將括號內的內部開關放在括號內,並且用雙引號代替簡單的引號。沒有成功。這裏是我的代碼:

<?php 
switch($id) { 
    case 3: 
    { 
    switch((string)$lang) { 
     case 'de': 
     $v = 'Bern'; 
     break; 
     case 'en': 
     $v = 'Berne'; 
     break; 
     default: 
     $v = 'Berne'; 
     } 
    } 
    break; 

    case 4: 
    { 
    switch($lang) { 
     case 'de': 
     $v = 'Zürich'; 
     break; 
     case 'en': 
     $v = 'Zurich'; 
     break; 
     default: 
     $v = 'Zurich'; 
     } 
    } 
    break; 

    default: 
    { 
    switch($lang) { 
     case 'de': 
     $v = 'Genf'; 
     break; 
     case 'en': 
     $v = 'Geneva'; 
     break; 
     default: 
     $v = 'Genève'; 
     } 
    } 
    break; 
} 
return $v; 
?> 
+0

把'的var_dump($ LANG)的var_dump($ LANG == '德');'後兩'$ v = '伯爾尼';'並再次檢查。 –

+0

您不妨''echo mb_detect_encoding($ lang)'以確保它使用正確的編碼方式,並且您可能也想'trim($ lang)'。 – frz3993

+0

謝謝。這個問題並不在代碼本身,而在於它被用作MODx內容管理系統的一個片段,它有一個服務器端緩存機制。因此,代碼返回與第一次調用相同的值。我將這些代碼片段解開,解決了這個問題。 – OuzoPower

回答

0
//I don't what error you are getting when i am testing your code its working perfectly you can also see 
<?php 
$id = 4; 
$lang="de"; 
switch($id) { 
    case 3: 
    { 
    switch((string)$lang) { 
     case 'de': 
     $v = 'Bern'; 
     break; 
     case 'en': 
     $v = 'Berne'; 
     break; 
     default: 
     $v = 'Berne'; 
     } 
    } 
    break; 

    case 4: 
    { 
    switch($lang) { 
     case 'de': 
     $v = 'Zurich1'; 
     break; 
     case 'en': 
     $v = 'Zurich2'; 
     break; 
     default: 
     $v = 'Zurich3'; 
     } 
    } 
    break; 

    default: 
    { 
    switch($lang) { 
     case 'de': 
     $v = 'Genf'; 
     break; 
     case 'en': 
     $v = 'Geneva'; 
     break; 
     default: 
     $v = 'Genève'; 
     } 
    } 
    break; 
} 
echo $v; 
?> 
+0

謝謝。我意識到代碼工作完美。問題來自於我將它用作MODx內容管理系統的片段,該系統具有服務器端緩存機制。此片段本身是從另一個片段使用的塊(=子模板)中調用的。我顛倒了這兩個片段的緩存/非緩存狀態,並解決了這個問題。 – OuzoPower