2013-11-14 86 views
0

我正在重新構建我的php應用程序中的語言系統,以便更容易地創建翻譯。php - in_array在文件中包含數組時返回false

我做的一件事情就是將所有東西都轉換成一個大數組$ lang;這裏是什麼樣子的例子:

require_once "lang/en/lang.php"; 

調用$ LANG [「共同的:登錄」]

$lang['common:login'] = "Login"; 
$lang['common:signup'] = "Sign Up"; 
$lang['index:title'] = "Home Page"; 
$lang['messages:newmessages'] = "You have %s new messages"; 

我用下面的代碼加載它沒有問題wqork中,一旦我做了一個加載這些函數的函數,與之前我做過的其他方法相比,就會出現問題。

function outputLanguage($tag) { 

    global $lang; 

    //see if tag exists. 
    if (!in_array($tag, $lang)) { 
     return $tag." is an invalid language tag."; 
    } else { 
     return $lang[$tag]; 
    } 
} 

看起來,in_array()不喜歡使用其他來源包含的數組。

我誠實地想要有一些驗證,以防有人犯了一個錯誤,那麼是否有人知道一個好的解決方案?

謝謝。

+1

in_array()沒有按」 t知道或關心$ lang數組是從另一個源包含的;但肯定你應該測試的關鍵,而不是價值...和in_array()測試值 –

+0

你的權利,不知道我在想什麼。 – Eman

回答

3

您需要使用array_key_exists代替in_array

+0

注意'isset'和'array_key_exists'然而,http://stackoverflow.com/questions/3210935/difference-between-isset-and-array-key-exists – hank

+0

Doh你的權利,這是問題,謝謝你的清爽我的記憶。 – Eman

0

您正在尋找的數組鍵,嘗試:

if(!isset($lang[$tag])) { 
    return $tag." is an invalid language tag."; 
} else { 
    return $lang[$tag]; 
} 

或者,我會回來false

return isset($lang[$tag]) ? $lang[$tag] : false;