有没有更好的方法来对包含各种语言的字符串的数组进行排序
Is there a better approach to sort an array that contains strings of various languages
问题:需要根据特定语言对包含字符串的数组进行排序,例如语言的原始名称。希腊语 (el),这样用希腊语写的名字将首先排序,然后是其他语言的名字。
输入:
$arLanguages = [
'English',
'Αγγλικά',
'Русский',
'Ρωσική',
'Ελληνικά',
];
预期输出:
Array
(
[0] => Αγγλικά
[1] => Ελληνικά
[2] => Ρωσική
[3] => English
[4] => Русский
)
我试过的:
setlocale(LC_COLLATE, 'el');
asort($arLanguages);
print_r($arLanguages);
结果:没有任何反应。
编辑:我的PHP版本是7.3。
编辑 1:Simone 的解决方案不适用于中文和日文。我认为与多字节字符有关,或者因为中文和日文也使用拉丁字母。
尊敬的 SO 社区,如何以最佳方式解决所描述的问题?
感谢您的宝贵时间!
您可以使用Collator::sort
$arLanguages = [
'English',
'Αγγλικά',
'Русский',
'Ρωσική',
'Ελληνικά',
];
$coll = collator_create( 'el' );
collator_asort( $coll, $arLanguages ); // to preserve indexes
print_r($arLanguages); //output Array ( [0] => Αγγλικά [1] => Ελληνικά [2] => Ρωσική [3] => English [4] => Русский )
问题:需要根据特定语言对包含字符串的数组进行排序,例如语言的原始名称。希腊语 (el),这样用希腊语写的名字将首先排序,然后是其他语言的名字。
输入:
$arLanguages = [
'English',
'Αγγλικά',
'Русский',
'Ρωσική',
'Ελληνικά',
];
预期输出:
Array
(
[0] => Αγγλικά
[1] => Ελληνικά
[2] => Ρωσική
[3] => English
[4] => Русский
)
我试过的:
setlocale(LC_COLLATE, 'el');
asort($arLanguages);
print_r($arLanguages);
结果:没有任何反应。
编辑:我的PHP版本是7.3。
编辑 1:Simone 的解决方案不适用于中文和日文。我认为与多字节字符有关,或者因为中文和日文也使用拉丁字母。
尊敬的 SO 社区,如何以最佳方式解决所描述的问题?
感谢您的宝贵时间!
您可以使用Collator::sort
$arLanguages = [
'English',
'Αγγλικά',
'Русский',
'Ρωσική',
'Ελληνικά',
];
$coll = collator_create( 'el' );
collator_asort( $coll, $arLanguages ); // to preserve indexes
print_r($arLanguages); //output Array ( [0] => Αγγλικά [1] => Ελληνικά [2] => Ρωσική [3] => English [4] => Русский )