如何在数组特殊字符值进行排序?(How to sort values with special ch

2019-10-19 04:34发布

首先,我适当的区域设置为西班牙语:

setlocale(LC_ALL, 'es_ES');

这个数组保存的必须按字母顺序重新排序的语言列表。

$lang['ar'] = 'árabe';
$lang['fr'] = 'francés';
$lang['de'] = 'alemán';

所以我这样做:

asort($lang,SORT_LOCALE_STRING);

最终的结果是:

  • 德国
  • 法国
  • 阿拉伯语

...它应该是:

  • 阿拉伯语
  • 德国
  • 法国

该ASORT()函数发送一个字符排序列表的底部。 如何避免这一问题? 谢谢!

解决方案 链接通过@Sbls

function compareASCII($a, $b) {
    $at = iconv('UTF-8', 'ASCII//TRANSLIT', $a);
    $bt = iconv('UTF-8', 'ASCII//TRANSLIT', $b);
    return strcmp($at, $bt);
}
uasort($lang, 'compareASCII');

Answer 1:

这可能是比较检查字符的多字节值,并á在这种情况下,很可能大于z ,所以它会之后显示。 如果你想不考虑到这一点的比较,我看到两个possibilites:

  1. 排序使用uasort并创建自己的比较函数。
  2. 通过您的字符串的ASCII版本映射到真实的,和排序上的按键。


Answer 2:

尝试使用Collator::asortintl模块:

<?php
$collator = collator_create('es_ES');
$collator->asort($array);


Answer 3:

解决方案通过在@Sbls链接评论

function compareASCII($a, $b) {
    $at = iconv('UTF-8', 'ASCII//TRANSLIT', $a);
    $bt = iconv('UTF-8', 'ASCII//TRANSLIT', $b);
    return strcmp($at, $bt);
}
uasort($lang, 'compareASCII');


文章来源: How to sort values with special chars in array?
标签: php asort