用重音排序的php数组

时间:2012-03-11 12:26:38

标签: php arrays sorting

我使用它根据姓氏排序:

  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等,这些名字都在最后。我怎样才能正确排序?

2 个答案:

答案 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)

首先是什么?

  • A
  • a
  • ث

这是由归类定义的。

PHP为此提供了Collat​​or类: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 1766ISO 639,就可以了。