gpt4 book ai didi

php - 如何对 UTF-8 字符串数组进行排序?

转载 作者:IT王子 更新时间:2023-10-28 23:45:26 24 4
gpt4 key购买 nike

我目前不知道如何在 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 特定问题的解决方案会很好......

最佳答案

$a = array( 'Кръстев', 'Делян1', 'делян1', 'Делян2', 'делян3', 'кръстев' );
$col = new \Collator('bg_BG');
$col->asort( $a );
var_dump( $a );

打印:

array
2 => string 'делян1' (length=11)
1 => string 'Делян1' (length=11)
3 => string 'Делян2' (length=11)
4 => string 'делян3' (length=11)
5 => string 'кръстев' (length=14)
0 => string 'Кръстев' (length=14)

Collat​​or 类在 PECL intl extension 中定义.它随 PHP 5.3 源代码一起分发,但对于某些构建可能会被禁用。例如。在 Debian 中,它位于 php5-intl 包中。

Collat​​or::compareusort 很有用。

关于php - 如何对 UTF-8 字符串数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/120334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com