有没有更好的方法来对包含各种语言的字符串的数组进行排序

Sal*_*mov 7 php symfony-1.4

问题:需要对包含字符串的数组进行排序,例如语言的原始名称,基于特定语言(例如希腊语 (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。

编辑 1Simone的解决方案不适用于中文和日语。我认为这与多字节字符有关,或者因为中文和日文也使用拉丁字母。

亲爱的 SO 社区,如何以最好的方式解决所描述的问题?

谢谢你的时间!

Sim*_*ini 1

您可以使用Collat​​or::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 )\n
Run Code Online (Sandbox Code Playgroud)\n