首页 > 解决方案 > 是否有更好的方法来对包含各种语言字符串的数组进行排序

问题描述

问题:需要根据特定语言(例如希腊语(el))对包含字符串的数组进行排序,例如语言的原始名称,这样用希腊语编写的名称将首先排序,然后是其余名称在其他语言中。

输入

$arLanguages = [
    'English',
    'Αγγλικά',
    'Русский',
    'Ρωσική',
    'Ελληνικά',
];

预期输出

Array
(
    [0] => Αγγλικά
    [1] => Ελληνικά
    [2] => Ρωσική
    [3] => English
    [4] => Русский
)

我尝试了什么

setlocale(LC_COLLATE, 'el');
asort($arLanguages);
print_r($arLanguages);

结果:什么都没有发生。

编辑:我的 PHP 版本是 7.3。

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

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

谢谢你的时间!

标签: phpsymfony-1.4

解决方案


您可以使用Collat​​or::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] => Русский )

推荐阅读