排序PHP中的特殊字符数组(Sort an array with special character

2019-06-24 14:05发布

我持有的西班牙语语言名称的数组:

$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)

Answer 1:

尝试通过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);


Answer 2:

你在正确定义你的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 ) 


Answer 3:

对于文档setlocale提到,

不同的系统有不同的语言环境命名方案。

这有可能是你的系统无法识别的语言环境es_ES 。 如果你是在Windows上,尝试esp_ESP代替。



Answer 4:

试试这个

setlocale(LC_COLLATE, 'nl_BE.utf8');
$array = array('coreano','árabe','español','francés');
usort($array, 'strcoll'); 
print_r($array);


文章来源: Sort an array with special characters in PHP