根据可能包含重音字符的列文本对二维数组的行进行排序

问题描述 投票:0回答:2

我用它来根据姓氏排序:

usort($fb_friends['data'], "custom_sort");          
function custom_sort($a, $b) { 
    return $a['last_name'] > $b['last_name'];
}

foreach ($fb_friends['data'] as $friend) { 
    echo '<br>'; 
    echo $friend['name']; 
} 

但是 - 当姓氏中有重音时,例如Šiko、Áron 等,这些名字在最后。如何对其进行排序,以便重音字符位于非重音字母附近?

php arrays sorting multidimensional-array accent-insensitive
2个回答
17
投票

使用多字节字符串函数。有一个名为

strcoll
的函数似乎可以满足您的需求。

更多信息:


编辑:添加了彼得的工作代码,如下

setlocale(LC_COLLATE, 'sk_SK.utf8');

usort($fb_friends['data'], 'custom_sort');

function custom_sort($a, $b) {
    return strcoll ($a['last_name'], $b['last_name']);
}

foreach ($fb_friends['data'] as $friend) {
    echo '<br>';
    echo $friend['name'];
}

9
投票

什么先发生?

  • A
  • a

这是由 Collation 定义的。

PHP 为此提供了 Collator 类:https://www.php.net/manual/en/class.collator.php

示例:

$array = [ 'A', 'a', '文', 'ث' ];

// Brazilian Portuguese
$collator = new Collator('pt_BR');

$collator->asort( $array );

print_r( $array );

退货:

Array
(
    [1] => a
    [0] => A
    [3] => ث
    [2] => 文
)

现在有中文校对

new Collator('zh')
:

Array
(
    [2] => 文
    [1] => a
    [0] => A
    [3] => ث
)

您可以在这里亲自尝试:https://3v4l.org/0vsBR

© www.soinside.com 2019 - 2024. All rights reserved.