我最近尝试创建一个包含多个字符串的数组,代表 AcceptLanguage 标头。我需要将另一种用户指定的语言推送到数组的开头,以使其具有最高优先级。
到目前为止我有
function getRequestLangs(){
//get languages from browser
$accLangs = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
$requestedLanguages = array();
foreach($accLangs as $key => $lang){
$lang = substr($lang,0,2);
// p is a quality param, we won't need it, since the
// preferred languages are already sorted by default
if($lang != 'p='){
array_push($requestedLanguages,$lang);
}
}
// we only need each language once, this function keeps the order
return array_unique($requestedLanguages);
}
现在我想添加用户指定的语言作为第一个键(如果语言不支持,我可能会退回到另一种接受的语言)
//language from path, pushed as first index (highest priority)
if(isset($_GET['lang']) && $_GET['lang'] != ""){
$requestedLanguages = array_unshift($requestedLanguages,$_GET['lang']);
}
var_dump($requestedLanguages)
在 array_unshift 之前:
array(2) {
[0]=> string(2) "de"
[2]=> string(2) "en"
}
var_dump($requestedLanguages)
在array_unshift之后:
int(3)
我认为这可能与 0 到 2 之间的索引孔有关,但这只是一个猜测。
[编辑] 我需要更多的咖啡因...
//wrong:
$requestedLanguages = array_unshift($requestedLanguages,$_GET['lang']);
//right:
array_unshift($requestedLanguages,$_GET['lang']);