我有一个数组,其中包含西班牙语的语言名称:
$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);
预期输出将按以下顺序排列:
但是,这就是我收到的内容:
我错过了什么吗?感谢您的反馈意见! (我的服务器使用的是PHP 5.2.13版)
答案 0 :(得分:9)
尝试按透明名称排序:
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);
答案 1 :(得分:1)
您在setlocale()
。
变化:
setlocale(LC_ALL,'es_ES.UTF-8');
要:
setlocale(LC_ALL,'es_ES');
输出:
Array ( [ar] => árabe [ko] => coreano [es] => español [fr] => francés )
答案 2 :(得分:1)
答案 3 :(得分:0)
试试这个
setlocale(LC_COLLATE, 'nl_BE.utf8');
$array = array('coreano','árabe','español','francés');
usort($array, 'strcoll');
print_r($array);
答案 4 :(得分:0)
这是没有问题的!
您的初始解决方案可以按预期工作,
您的问题是setlocale函数无法设置区域设置,因此asort($array, SORT_LOCALE_STRING)
无法按您期望的那样排序
您可以在phptester.net上尝试自己的接受setlocale()的代码:
$lang["ko"] = "coreano"; //korean
$lang["ar"] = "árabe"; //arabic
$lang["es"] = "español"; //spanish
$lang["fr"] = "francés"; //french
asort($lang,SORT_LOCALE_STRING);
echo "<pre>";
print_r($lang);
echo "</pre>";
echo "<pre>";
/*this should return es_ES;
if returns false it has failed and asort wont return expected order
*/
var_dump(setlocale(LC_ALL,'es_ES'));
echo "</pre>";
asort($lang,SORT_LOCALE_STRING);
echo "<pre>";
print_r($lang);