PHP从具有Key值的数组中获取值

时间:2015-01-06 15:55:10

标签: php mysql arrays mysqli

以下问题:我想构建一个基于mysql的语言系统。

为了减少加载时间并提高性能,我认为最好先将所有语言短语提取到一个数组中(使用mysqli fetch数组)。然后,如果需要语言术语,则使用数组作为全局变量调用函数。

我对阵列的功能:

$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" 
    } 
}

这就是我的功能:

function l($key) {
    global $phrases;

    return PLACEHOLDER;
}

我想知道,我现在如何在数组中搜索" phraseKey"来自函数的$ key并获得值? 你有什么提示吗?或者我只需用每个查询选择每个短语(每次加载100个查询的性能问题?!)?

干杯谢谢!

2 个答案:

答案 0 :(得分:3)

这是一个糟糕的结构。为什么不用短语ID和语言键入数组? e.g。

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

这消除了对任何搜索的需要。您只需按语言/短语ID查找。

答案 1 :(得分:2)

我建议用

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

然后在function l($key)中,您可以使用

进行搜索
$t = isset($phrases[$key]) ? $phrases[$key] : null