1

我最近尝试创建一个包含多个字符串的数组,代表 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']);
4

1 回答 1

3

array_unshift对提供的数组进行变异,并在将项添加到它之后返回数组中的新元素数,因此int(3)告诉您现在数组中有三个项。

http://uk3.php.net/manual/en/function.array-unshift.php

于 2013-08-09T07:52:18.107 回答