如何根据当地的字母表并保留他们的ID,按姓氏对人员列表进行排序?我找到了相关的代码片段,只是不能把它们放在一起。 所以最初的数组是:
$names = array(
"12" => "John Zareem",
"134" => "Elin Ärlik",
"24" => "Katrin Šüüva",
"11" => "Mati Winterberg"
);
现在按姓氏对它们进行排序:
function lastNameSort($a, $b) {
$aLast = end(explode(' ', $a));
$bLast = end(explode(' ', $b));
return strnatcmp($aLast, $bLast);
}
uasort($names, 'lastNameSort');
作品,但它是国际字母表。 要按本地(例如爱沙尼亚语)字母对数组进行排序:
setlocale(LC_ALL, 'et_EE.utf8');
asort($names, SORT_LOCALE_STRING);
关于本地字母表的作品,但不是因为姓氏。 是否可以将这两种排序方法结合起来? 提前谢谢!
答案 0 :(得分:4)
这方面不为人所知strcoll()
,可以在用户定义的回调中使用:
setlocale(LC_ALL, 'et_EE.utf8');
uasort($names, function($x, $y)
{
return strcoll(
end(preg_split('/\s+/', $x)),
end(preg_split('/\s+/', $y))
);
});
结果将是
array(4) {
[24]=>
string(15) "Katrin Šüüva"
[12]=>
string(11) "John Zareem"
[11]=>
string(15) "Mati Winterberg"
[134]=>
string(11) "Elin Ärlik"
}