我遇到了一个解析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.
谢谢.
我个人使用这样的东西:
$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将包含标题中的第一个受支持的语言(或默认值)
尝试这样的事情:
$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)