Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否有更好的方法循环两个关联数组以匹配其值?_Php - Fatal编程技术网

Php 是否有更好的方法循环两个关联数组以匹配其值?

Php 是否有更好的方法循环两个关联数组以匹配其值?,php,Php,我正在解析HTTP_ACCEPT_LANGUAGE标头以获取用户的语言,我正在构建一个类来实现这一点 实际上,我构建了一个关联数组($this->user_lang),其中键是语言(如“en-us”、“it-it”、“it-ch”等),值是质量因子(因此我可以对语言进行排序)。 然后我有另一个名为“$this->installed_langs”的关联数组,我在其中声明支持的语言和区域设置(形式为“en”=>“en_-US”,“it”=>“it_-it”) 我只想尝试将“$this->user_l

我正在解析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;
}
我希望我已经解释清楚了,顺便说一句,如果你需要更多信息,请问我。

试试这个

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];
        }
    }
}

似乎相当紧凑,如果它能工作,为什么要寻找一个替代方案?因为我想为找到的每种语言避免嵌套的foreach循环。。。这取决于浏览器中声明的将在标题中发送的语言数。这并不排除本地区域,虽然我需要它,但感谢您的建议。是的,这就是我要找的。谢谢
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];
        }
    }
}