如何对UTF-8字符串数组进行排序?
我目前不知道如何对PHP中包含UTF-8编码字符串的数组进行排序。数组来自LDAP服务器,因此通过数据库进行排序(没有问题)不是解决方案。以下内容在我的Windows开发计算机上不起作用(尽管我认为这至少应该是一个可能的解决方案):
$array=array('Birnen', 'Äpfel', 'Ungetüme', 'Apfel', 'Ungetiere', 'Österreich');
$oldLocal=setlocale(LC_COLLATE, "0");
var_dump(setlocale(LC_COLLATE, 'German_Germany.65001'));
usort($array, 'strcoll');
var_dump(setlocale(LC_COLLATE, $oldLocal));
var_dump($array);
输出为:
string(20) "German_Germany.65001"
string(1) "C"
array(6) {
[0]=>
string(6) "Birnen"
[1]=>
string(9) "Ungetiere"
[2]=>
string(6) "Äpfel"
[3]=>
string(5) "Apfel"
[4]=>
string(9) "Ungetüme"
[5]=>
string(11) "Österreich"
}
这完全是无稽之谈。使用 1252 作为 的代码页会给出另一个输出,但仍然是一个明显错误的输出:setlocale()
string(19) "German_Germany.1252"
string(1) "C"
array(6) {
[0]=>
string(11) "Österreich"
[1]=>
string(6) "Äpfel"
[2]=>
string(5) "Apfel"
[3]=>
string(6) "Birnen"
[4]=>
string(9) "Ungetüme"
[5]=>
string(9) "Ungetiere"
}
有没有办法对具有 UTF-8 字符串区域设置感知的数组进行排序?
刚刚注意到这似乎是Windows上的PHP问题,因为使用de_DE.utf8
作为区域设置的相同代码段适用于Linux机器。尽管如此,这个特定于Windows的问题的解决方案会很好...