我的数据库中存储了一些语言,如下所示:
id | code | name
--------------------------------------
1 | en_GB | English, United Kingdom
2 | pt_BR | Portugese, Brazil
3 | it_IT | Italian, Italy
4 | hi_IN | Hindi, India
5 | es_BR | Spanish, Brazil
6 | ur_IN | Urdu, India
我想获取这些结果并进行排序(或在获得所有结果后排序),因此我首先按排序的国家/地区代码(代码的第二部分)获取结果,然后按区域设置代码(代码的第一部分)获取结果,因此:
$languages = [
0 => [
'code' => 'es_BR'
],
1 => [
'code' => 'pt_BR'
],
2 => [
'code' => 'en_GB'
],
3 => [
'code' => 'hi_IN'
],
4 => [
'code' => 'ur_IN'
],
5 => [
'code' => 'it_IT'
]
];
我尝试遍历每种语言并取出第二部分并存储国家/地区代码数组,然后使用asort($countryCodes);
对它们进行排序,它确实按国家/地区代码 (GB) 排序,但我坚持按区域设置代码 (en) 对该列表进行排序。
任何帮助将不胜感激,谢谢!
我想出了以下内容,它给了我所需要的:
$languages = $this->getOrderedLanguages();
protected function getOrderedLanguages()
{
$languages = Language::orderBy('code')->get();
// Sort out the other languages by country code (e.g. sort by GB in code en_GB)
// Create array for each country code and store array key from original list
$countryCodes = [];
foreach($languages as $key => $language) {
$countryCodes[$language->locale_code][] = [
'id' => $key,
'language' => $language->language_code
];
}
ksort($countryCodes);
$orderedLanguages = [];
// Go through each country code and sort the languages in there by locale code (e.g. sort by en in code en_GB)
foreach($countryCodes as &$countryCode) {
asort($countryCode);
foreach($countryCode as $language) {
$orderedLanguages[] = $allLanguages[$language['id']];
}
}
// Return ordered array
return $orderedLanguages;
}
这给了我以下结果:
$languages = [
0 => [
'code' => 'es_BR'
],
1 => [
'code' => 'pt_BR'
],
2 => [
'code' => 'en_GB'
],
3 => [
'code' => 'hi_IN'
],
4 => [
'code' => 'ur_IN'
],
5 => [
'code' => 'it_IT'
]
];
我想array_multisort就是你要找的。
你会使用 usort() - http://php.net/usort
我的建议是:
function cmp($a, $b){
return strcmp($a["code"], $b["code"]);
}
usort($languages, "cmp");
print_r($languages);
希望这对你有帮助
请尝试使用其他版本的代码:
$fArray=array();
foreach($languages as $languages){
array_push($fArray,$languages);
}
sort($fArray);
print_r($fArray);
`OR`
array_multisort($languages);
print_r($languages);
以下是为这两个函数生成的数组:
Array
(
[0] => Array
(
[code] => en_GB
)
[1] => Array
(
[code] => es_BR
)
[2] => Array
(
[code] => hi_IN
)
[3] => Array
(
[code] => it_IT
)
[4] => Array
(
[code] => pt_BR
)
[5] => Array
(
[code] => ur_IN
)
)