有没有更好的方法来循环两个关联数组来匹配它们的值?

时间:2011-08-04 10:02:22

标签: php

我正在解析HTTP_ACCEPT_LANGUAGE标头以获取用户的语言,我正在构建一个类来执行此操作。

实际上我构建了一个关联数组(“$ this-> user_lang”),其中键是语言(例如“en-us”,“it-it”,“it-ch”等),值是品质因素(所以我可以订购语言)。 然后我有另一个名为“$ this-> installed_langs”的关联数组,其中我声明了支持的语言和语言环境(格式为“en”=>“en_US”,“it”=>“it_IT”)。

我想要做的就是尝试将“$ this-> user_lang”的一个键与“$ this-> installed_langs”中的一个匹配(不管“ - ”之后的本地区域)并返回第一次出现(不关心其他匹配的情况)。

我最终得到了这种方法,但似乎有点过于复杂......

public function show() {
    $g_locale = null;
    foreach ($this->user_lang as $lang => $q) {
        foreach($this->installed_langs as $valid => $locale) {
            if (strpos($lang, $valid) !== false) {
                if ($g_locale === null) $g_locale = $locale;
            }
        }
    }
    // debug:
    echo $g_locale;
}

我希望我已经解释得很好,顺便说一句,如果您需要更多信息,请问我。

2 个答案:

答案 0 :(得分:1)

试试这个

public function show() {
    $g_locale = null;
    foreach ($this->user_lang as $lang => $q) {
        if ( array_key_exists( $lang, $this->installed_langs ) ) {
            $g_locale = $this->installed_langs[$lang];
        }
    }
}

答案 1 :(得分:0)

function show() {
    $g_locale = null;
    foreach ($this->user_lang as $lang => $q) {
        $_key=explode($lang, '-'); // 'en-us' => 'array('en', 'us')
        $key=$_key[0]; // 'en'
        if ( array_key_exists( $key, $this->installed_langs ) ) {
            $g_locale = $this->installed_langs[$key];
        }
    }
}