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

2022-08-30 16:52:47

需要帮助按 utf-8 对单词进行排序。例如,我们有来自比利时的5个城市。

$array = array('Borgloon','Thuin','Lennik','Éghezée','Aubel');
sort($array); // Expected: Aubel, Borgloon, Éghezée, Lennik, Thuin
              // Actual: Aubel, Borgloon, Lennik, Thuin, Éghezée

埃格泽市应该是第三名。是否可以使用/设置某种 utf-8 或创建我自己的字符顺序?


答案 1

intl 与 PHP 5.3 的 PHP 捆绑在一起,它只支持 UTF-8

在这种情况下,您可以使用归类程序

$array = array('Borgloon','Thuin','Lennik','Éghezée','Aubel');
$collator = new Collator('en_US');
$collator->sort($array);
print_r($array);

输出:

Array
(
    [0] => Aubel
    [1] => Borgloon
    [2] => Éghezée
    [3] => Lennik
    [4] => Thuin
)

答案 2

我认为你可以使用strcoll

setlocale(LC_COLLATE, 'nl_BE.utf8');
$array = array('Borgloon','Thuin','Lennik','Éghezée','Aubel');
usort($array, 'strcoll'); 
print_r($array);

结果:

Array
(
    [0] => Aubel
    [1] => Borgloon
    [2] => Éghezée
    [3] => Lennik
    [4] => Thuin
)

您需要系统上的 nl_BE.utf8 语言环境:

fy@Heisenberg:~$ locale -a | grep nl_BE.utf8
nl_BE.utf8

如果你使用的是 debian,你可以使用 dpkg --reconfigure locales 来添加语言环境。