如何在PHP中结合两种排序方法?

如何根据当地字母并按照其姓氏对人进行排序,并保留其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);

适用于本地字母,但不是姓氏.
可以将这两种分类方法结合起来吗?
提前致谢!

解决方法:

没有一个众所周知的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"
}
上一篇:c#-用数组模拟4个象限


下一篇:c#-通过反射通过自定义属性对实体进行Linq排序