我持有的西班牙语语言名称的数组:
$lang["ko"] = "coreano"; //korean
$lang["ar"] = "árabe"; //arabic
$lang["es"] = "español"; //spanish
$lang["fr"] = "francés"; //french
我需要订购阵列并保持索引关系,所以我用ASORT()与SORT_LOCALE_STRING
setlocale(LC_ALL,'es_ES.UTF-8'); //this is at the beginning (config file)
asort($lang,SORT_LOCALE_STRING);
print_r($lang);
预期结果将是这个顺序:
- 阵列([AR] =>阿拉伯[KO] =>韩文[ES] =>西班牙语[FR] =>法语)
然而,这是我收到的:
- 阵列([KO] =>韩文[ES] =>西班牙语[FR] =>法语[AR] =>阿拉伯语)
我缺少的东西吗? 感谢您的反馈意见! (我的服务器使用的PHP版本5.2.13)
尝试通过translitterated名称排序:
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');
print_r($lang);
你在正确定义你的locale setlocale()
更改:
setlocale(LC_ALL,'es_ES.UTF-8');
至:
setlocale(LC_ALL,'es_ES');
输出:
Array ( [ar] => árabe [ko] => coreano [es] => español [fr] => francés )
对于文档setlocale
提到,
不同的系统有不同的语言环境命名方案。
这有可能是你的系统无法识别的语言环境es_ES
。 如果你是在Windows上,尝试esp_ESP
代替。
试试这个
setlocale(LC_COLLATE, 'nl_BE.utf8');
$array = array('coreano','árabe','español','francés');
usort($array, 'strcoll');
print_r($array);