繁体   English   中英

如何使用带有重音字符的 PHP array_multisort

[英]How to use PHP array_multisort with accented characters

我目前有一个多维数组,我正在使用 array_multisort 进行排序,但是其中一列有一些特殊的重音字符 - 例如Développé

有没有办法用它们等效的非重音字母é = e对这些字符进行排序?

array_multisort($column1, SORT_ASC,SORT_STRING|SORT_FLAG_CASE, $column2, SORT_ASC,SORT_STRING|SORT_FLAG_CASE, $multid_array);

关于这个问题,这里有一些关于 SO 的答案,但是当我过去尝试它们时,似乎它们中的大多数过于依赖系统的区域设置,甚至str_replace 不完整 arrays 因此,运行代码会在不同的环境中产生不同的结果,或者会遗漏几个字符。

最后我发现最好的方法来自这个未被接受的答案 根据我的测试,这种方法非常有效,独立于所有本地设置,并且可以仅适用于重音è或不同的设置,如æ

基础是Transliterator class ,是国际扩展的一部分。 从 PHP 5.4 开始可用。 在大多数系统中,它要么已经捆绑在一起,要么可以与

pecl install intl`

更多安装信息在这里

用法

使用方法非常简单

  1. 第 1 步:您初始化音译器 object
$transliterator = Transliterator::createFromRules(':: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', Transliterator::FORWARD);

有关可应用于此 function 的规则列表,请参阅 本手册 示例中使用的那些已经适用于您的特定用例。

  1. 第 2 步:您使用它来音译您的文本
$newstring = $transliterator->transliterate($string);

在您的特定情况下,您当然需要应用于数组的所有相关元素。

你没有共享数组结构,所以我无法给出一个清晰的例子,但是根据结构,你可以使用foreacharray_walk或递归函数在需要的地方循环和更改。 如果你想用数组中的样本更新你的初始问题,我们可以更精确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM