首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于特定于语言的约定的按字母顺序排列的组数组

关于特定于语言的约定的按字母顺序排列的组数组
EN

Stack Overflow用户
提问于 2013-03-17 12:43:22
回答 1查看 339关注 0票数 1

我正在寻找一个聪明的解决方案,排序字符串与扩展字符。这始终是一个使用语言的问题。让我们以德语为例:a和in有时可以被排序,就好像它们是同一个字母(DIN 5007/1),有时可以像实际上的"AE“(DIN 5007/2)那样排序。相反,在瑞典语中,在字母表的末尾。

字母顺序:特定语言的约定上可以找到各种语言的此类约定列表。

最快的方法是将一个像DIN 5007/1的数组分组为

代码语言:javascript
复制
$array = array
(
    0 => 'Agile',
    1 => 'Ágile',
    2 => 'Àgile',
    3 => 'Âgile',
    4 => 'Ägile',
    5 => 'Ãgile',
    6 => 'Test',
);

// Grouped Result:

Array
(
    'A' => array
    (
        [0] => Agile
        [1] => Àgile
        [2] => Ágile
        [3] => Âgile
        [4] => Ãgile
        [5] => Ägile
    ),
    'T' => array
    (
        [0] => Test
    )
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-30 03:38:48

我不认为有一个快速的方法,分组像DIN 5007/1这样的数组,至少我没有看到一个。

一个解决方案需要考虑两个方面:排序算法,即根据DIN 5007/1进行排序的排序算法。将结果分组,以尊重特殊字符引起的相似性。

排序

您可以在使用SORT_LOCAL_STRING参数时设置array_multisort()。请记住通过在前面设置de_DE来选择适当的区域设置信息(例如setlocal() )。

代码语言:javascript
复制
// randomly sorted terms
$array = array(
    'Agile',
    'Ágile',
    'Test',
    'Âgile',
    'Ägile',
    'Ãgile',
    'Àgile',
);

setlocale(LC_ALL, '');
array_multisort($array, SORT_ASC, SORT_LOCALE_STRING);
print_r($array);

但这不会导致你想要的结果。

代码语言:javascript
复制
Array
(
    [0] => Agile
    [1] => Test
    [2] => Àgile
    [3] => Ágile
    [4] => Âgile
    [5] => Ãgile
    [6] => Ägile
)

您将不得不深入研究可用的地区,可能需要手动添加所有相关的locales工作。

类别/地区名称可以在?RFC 1766和?ISO 639中找到。(来源)

分组

通过使用预定义的组有一个一种良好的分组算法。这意味着您必须手动定义映射表(例如Ä = AÖ = O .)。

或者您可以实现相似性检查,例如similar_text()levenshtein()

SQL作为替代?

在SQL中如何更有效、更高效地实现这个问题,还需要进一步考虑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15460817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档