我使用它根据姓氏排序:
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等,这些名字都在最后。我怎样才能正确排序?
答案 0 :(得分:14)
使用多字节字符串函数。有一个名为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'];
}
答案 1 :(得分:1)
首先是什么?
这是由归类定义的。
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
第一个参数接收语言环境。我找不到有关哪些语言环境有效的信息,似乎不同的系统对语言环境具有不同的命名方案,但是如果您坚持使用RFC 1766或ISO 639,就可以了。