首先,我将正确的语言环境设置为西班牙语:
setlocale(LC_ALL, 'es_ES');
此数组包含必须按字母顺序重新排序的语言列表。
$lang['ar'] = 'árabe';
$lang['fr'] = 'francés';
$lang['de'] = 'alemán';
所以我这样做:
asort($lang,SORT_LOCALE_STRING);
最终结果是:
......它应该是:
asort()函数将á字符发送到有序列表的底部。我该如何避免这个问题?谢谢!
@Sbls的解决方案 linked
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');
答案 0 :(得分:0)
比较可能会检查字符的多字节值,在这种情况下á
可能大于z
,因此它会在之后显示。如果你想要一个没有考虑到这一点的比较,我会看到两个可能性:
答案 1 :(得分:0)
尝试使用intl
模块中的Collator::asort
:
<?php
$collator = collator_create('es_ES');
$collator->asort($array);
答案 2 :(得分:0)
@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');