解析HTTP_ACCEPT_LANGUAGE

med*_*edk 3 php arrays

我遇到了一个解析HTTP_ACCEPT_LANGUAGE的脚本:http://www.thefutureoftheweb.com/blog/use-accept-language-header

此脚本返回包含可接受语言的ORDERED数组:

数组([it] => 1 [ar] => 0.8 [ja] => 0.6 [cn] => 0.4 [de] => 0.2)

现在,我想创建一个包含可用语言的数组:

$ av_lang = array('en','fr','de','it'); (无序数组)

然后我想遍历第一个数组并获取第二个数组中的第一个键.

例如,它从第一个数组中获取'en'并检查第二个数组中是否存在,如果不存在,则转到下一个键'ar'并检查它.如果没有,返回默认的lang,如'en'.

最后,我想获得$ av_lang中可用的一个lang.

谢谢.

ood*_*vid 8

我个人使用这样的东西:

$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
preg_match_all('/(\W|^)([a-z]{2})([^a-z]|$)/six', $lang, $m, PREG_PATTERN_ORDER);
$user_langs = $m[2];
Run Code Online (Sandbox Code Playgroud)

你得到的是一系列双字母语言,然后你可以遍历它们并找到你支持的语言,即

$supported_langs = array('en', 'fr', 'de', 'it');
$user_lang = 'en'; // Default
foreach($user_langs AS $tmp){
    if(in_array($tmp, $supported_langs)){
        $user_lang = $tmp;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

此时$user_lang将包含标题中的第一个受支持的语言(或默认值)


zer*_*kms 6

尝试这样的事情:

$lang = array('it' => 1, 'ar' => 0.8, 'ja' => 0.6, 'cn' => 0.4, 'de' => 0.2);
$preferred = array('en', 'ja');

$intersect = array_values(array_intersect(array_keys($lang), $preferred));

if (isset($intersect[0])) {
    echo $intersect[0]; // returns ja
}
Run Code Online (Sandbox Code Playgroud)