问题:需要对包含字符串的数组进行排序,例如语言的原始名称,基于特定语言(例如希腊语 (el)),以这样的方式先对以希腊语书写的名称进行排序,然后再对其余名称进行排序其他语言。
输入:
$arLanguages = [
'English',
'???????',
'???????',
'??????',
'????????',
];
Run Code Online (Sandbox Code Playgroud)
预期输出:
Array
(
[0] => ???????
[1] => ????????
[2] => ??????
[3] => English
[4] => ???????
)
Run Code Online (Sandbox Code Playgroud)
我试过的:
setlocale(LC_COLLATE, 'el');
asort($arLanguages);
print_r($arLanguages);
Run Code Online (Sandbox Code Playgroud)
结果:什么都没有发生。
编辑:我的 PHP 版本是 7.3。
编辑 1:Simone的解决方案不适用于中文和日语。我认为这与多字节字符有关,或者因为中文和日文也使用拉丁字母。
亲爱的 SO 社区,如何以最好的方式解决所描述的问题?
谢谢你的时间!
您可以使用Collator::sort
\n$arLanguages = [\n \'English\',\n \'\xce\x91\xce\xb3\xce\xb3\xce\xbb\xce\xb9\xce\xba\xce\xac\',\n \'\xd0\xa0\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8\xd0\xb9\',\n \'\xce\xa1\xcf\x89\xcf\x83\xce\xb9\xce\xba\xce\xae\',\n \'\xce\x95\xce\xbb\xce\xbb\xce\xb7\xce\xbd\xce\xb9\xce\xba\xce\xac\',\n];\n\n$coll = collator_create( \'el\' );\ncollator_asort( $coll, $arLanguages ); // to preserve indexes\n\nprint_r($arLanguages); //output Array ( [0] => \xce\x91\xce\xb3\xce\xb3\xce\xbb\xce\xb9\xce\xba\xce\xac [1] => \xce\x95\xce\xbb\xce\xbb\xce\xb7\xce\xbd\xce\xb9\xce\xba\xce\xac [2] => \xce\xa1\xcf\x89\xcf\x83\xce\xb9\xce\xba\xce\xae [3] => English [4] => \xd0\xa0\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8\xd0\xb9 )\nRun Code Online (Sandbox Code Playgroud)\n