2015-01-06 98 views
2

以下問題:我想構建一個基於mysql的語言系統。PHP從數組中獲取值的鍵值

爲了減少加載時間並提高性能,我認爲這將是最好的,首先將所有語言短語讀取到一個數組(這與mysqli獲取數組發生)。然後,如果需要語言術語,則將該數組調用爲全局變量。

我對陣列功能:

$sql  = $db->query('SELECT * FROM lang_phrases WHERE phraseLanguageId = 1'); 
$phrases = array(); 

while($row = $sql->fetch_array()) { 
    $phrases[] = $row; 
} 

現在我有了這個數組:

array(2) { 
    [0]=> array(8) { 
     [0]=> string(1) "1" 
     ["phraseId"]=> string(1) "1" 
     [1]=> string(1) "1" 
     ["phraseLanguageId"]=> string(1) "1" 
     [2]=> string(4) "HOME" 
     ["phraseKey"]=> string(4) "HOME" 
     [3]=> string(10) "Homepage" 
     ["phraseContent"]=> string(10) "Homepage" 
    } 
    [1]=> array(8) { 
     [0]=> string(1) "2" 
     ["phraseId"]=> string(1) "2" 
     [1]=> string(1) "1" 
     ["phraseLanguageId"]=> string(1) "1" 
     [2]=> string(4) "BACK" 
     ["phraseKey"]=> string(4) "BACK" 
     [3]=> string(6) "Back" 
     ["phraseContent"]=> string(6) "Back" 
    } 
} 

而這就是我的功能:

我不知道,我怎麼能現在從函數中搜索數組中的「phraseKey」$ key並獲取值? 你有什麼提示嗎?或者,我應該簡單地選擇每個詞組與每個查詢(性能問題,每個負載100個查爾斯!)?

乾杯和謝謝!

+0

只是作爲一個一邊尋找他們以檢索短語,這將可能有一個低得多的開銷做同樣的事情,如果你有足夠的控制權來使用你的服務器(可能需要一個專用服務器,因爲如果/當你改變PO文件時你需要軟重啓):http://php.net/manual/ en/book.gettext.php – CD001

回答

2

我可以建議與

while($row = $sql->fetch_array()) { 
    $phrases[$row['phraseKey']] = $row; 
} 

然後在你的function l($key)你可以用

$t = isset($phrases[$key]) ? $phrases[$key] : null 
+0

對不起,忘了每一件事。偉大的作品!謝謝! – Max

3

這是一個糟糕的結構。爲什麼不用短語ID和語言鍵入你的數組?例如

$translations = array(
    'HOME' => array(
     'english' => 'Home', 
     'french' => 'Maison', 
     'german' => 'Haus" 
    etc... 

這消除了對任何搜索的需要。您只需通過語言/短語ID直接查找。

+0

我不喜歡你的區域加載所有的想法進入這個數組的語言 – cmorrissey

+0

其中6個,另外6個。完全取決於OP有多少詞組/語言。在某些時候,buildnig這個數組的開銷會超過只有部分數據並重複查詢的開銷。 –