Php Strcoll分拣顺序

Php Strcoll分拣顺序,php,sorting,Php,Sorting,我有一个带有姓名和ID-s的初始数组,必须根据姓氏进行排序,同时遵循本地字母表: $names = array( "134" => "Mati Vänt", "24" => "Mati Vint", "11" => "Mati Wint", "12" => "John Zareem", ); 以及对它们进行排序的功能(非常感谢Alma Do): 结果是:John Zareem,Mati Vint,Mati W

我有一个带有姓名和ID-s的初始数组,必须根据姓氏进行排序,同时遵循本地字母表:

$names = array(
    "134" =>    "Mati Vänt",
    "24" =>     "Mati Vint",
    "11" =>     "Mati Wint",
    "12" =>     "John Zareem",
);
以及对它们进行排序的功能(非常感谢Alma Do):

结果是:John Zareem,Mati Vint,Mati Wint,Mati Vänt

在本地字母表中,Z排在V之前是正确的,但为什么姓氏以一个字母(V)开头,而名字的首字母(W)不同呢?有没有办法避免呢?
提前谢谢

我对你的字母表一无所知,但这可能与你设置语言环境的方式有关。我取下了
.utf8
,并且。似乎.utf8仍然是必要的-否则Vänt(ä)出现在Vint(I)等之前,这在本地字母表中是不正确的:(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,Š,Z,t,t,U,V,W,Õ,Ä,Ö,Ü,X,Y)是的,再次检查-使用strcoll()其他一切都井井有条,然后姓以V开头。。然后突然。。然后又是V。也许用字母表创建一个数组并按它对名称数组进行排序更有意义?谢谢你发布你的字母表。不幸的是,我还没有找到一个简单的解决方法,但我确实偶然发现了一个问题,这表明您正在经历的可能是标准PHP库和UTF-8编码字符串的限制。对该问题投票最多的答案是使用intl扩展中的Collator类。如果我发现其他有用的东西,我会告诉你的。
setlocale(LC_ALL, 'et_EE.utf8');
uasort($nimed, function($x, $y)
{
    return strcoll(
    end(preg_split('/\s+/', $x)),
    end(preg_split('/\s+/', $y))
);
});