php 基于可能包含重音字符的列的文本对2d数组的行进行排序

kse8i1jr  于 6个月前  发布在  PHP
关注(0)|答案(2)|浏览(54)

我用这个来按姓氏排序:

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等,这些名字在最后。我如何排序,以便重音字符位于非重音字母附近?

s4n0splo

s4n0splo1#

使用多字节字符串函数。有一个名为strcoll的函数似乎适合您的需求。
更多信息:

编辑:添加了Peter的工作代码,如下所示

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'];
}

字符串

4zcjmb1e

4zcjmb1e2#

什么先来?

  • ث

这是由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

相关问题