php - 是否有更好的方法来对包含各种语言字符串的数组进行排序
问题描述
问题:需要根据特定语言(例如希腊语(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] => Русский )
推荐阅读
- c++ - 无法编译代码,因为它在 C++11 中已弃用
- django - django 将变量返回给用户
- javascript - 如何按 ID 和名称和城市过滤以与 redux 进行原生反应?
- android - 找不到参数 [com.google.android.material:material:1.1.0] 的方法 implementation()
- python - 计算重复元素中的数组
- python - 调用方法作为参数
- amazon-web-services - AWS - 存储用户能力表
- swift - UICollectionView sizeForItemAt 调用但大小不正确
- haskell - haskell 文档中的“Integral a => Enum (Ratio a)”是什么意思?
- python - 我需要编写一个正则表达式来识别所有以逗号分隔的数字,不包括 4 位数字