【发布时间】:2014-01-22 08:52:45
【问题描述】:
首先,我将正确的语言环境设置为西班牙语:
setlocale(LC_ALL, 'es_ES');
此数组包含必须按字母顺序重新排序的语言列表。
$lang['ar'] = 'árabe';
$lang['fr'] = 'francés';
$lang['de'] = 'alemán';
所以我这样做:
asort($lang,SORT_LOCALE_STRING);
最终结果是:
- 阿莱曼
- 弗朗西斯
- árabe
...应该是:
- árabe
- 阿莱曼
- 弗朗西斯
asort() 函数将 á 字符发送到有序列表的底部。我怎样才能避免这个问题?谢谢!
解决方案 linked @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');
【问题讨论】:
-
ksort不适合你吗?我对键而不是值进行排序。 -
@Sbls 这对我来说是行不通的。我有几个语言包,键总是保持不变,但值不会。我总是需要按价值订购。
-
stackoverflow.com/questions/10649473/… 的可能重复项您可以使用该问题线程吗?
-
我看到的一件事是,您正在设置
$lang的值,但对$list['translate']进行排序,是同一个数组吗? -
AlexSiri:它根本不会排序。也许是一个错字。 @andufo:不过,整件事对我有用。好吧,对我来说,阿拉贝在阿莱曼之后。但它不会最后出现。