为了账号安全,请及时绑定邮箱和手机立即绑定

在多维数组中的 php 中排序时忽略重音字符

在多维数组中的 php 中排序时忽略重音字符

PHP
慕标5832272 2023-09-15 21:26:40
我有如下所示的多维数组,我想在其中基于[name]字段进行排序。另外,带重音的字母应该像不带重音的字母一样排序。Array(    [chicago] => Array        (            [community_name] => Chicago, IL            [areas] => Array                (                    [0] => Array                        (                            [name] => Array                                (                                    [0] => HELLO WORLD.                                )                        )                    [1] => Array                        (                            [name] => Array                                (                                    [0] => Hello                                )                        )                    [2] => Array                        (                            [name] => Array                                (                                    [0] => Administration.                                )                        )                )        )    [chicago-and-surrounding-areas] => Array        (            [community_name] => Chicago (and surrounding areas), IL            [areas] => Array                (                    [0] => Array                        (                            [name] => Array                                (                                    [0] => Covit Corp.                                 )                        )                    [1] => Array                        (                            [name] => Array                                (                                    [0] => Câble-Axion Digital Corp.                                 )                        )                   )        )
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

使用 intl 的 Collator:


$arr = [

  ['key' => 'Avocado'],

  ['key' => 'Aṕple'],

];


$c = new Collator('root');

usort(

    $arr,

    function($a, $b) use($c){

        return $c->compare($a['key'], $b['key']);

    }

);

var_dump($arr);

输出:


array(2) {

  [0]=>

  array(1) {

    ["key"]=>

    string(7) "Aṕple"

  }

  [1]=>

  array(1) {

    ["key"]=>

    string(7) "Avocado"

  }

}

其中“root”使用一组默认规则,这些规则似乎会根据需要忽略重音,但您可以为特定于语言的排序顺序指定实际区域设置。


查看完整回答
反对 回复 2023-09-15
?
长风秋雁

TA贡献1757条经验 获得超7个赞

您可以使用Normalizer将字符与变音符号分开,然后将其删除以获得“基本”字符。

function stripDiacritics(string $string): string {

    return preg_replace(

        '/[\x{0300}-\x{036f}]/u',

        '',

        Normalizer::normalize($string , Normalizer::FORM_D)

    );

}


foreach ($array as &$locality) {

    usort($locality['areas'], function ($a, $b) {

        return stripDiacritics($a['name'][0]) <=> stripDiacritics($b['name'][0]);

    });

}    

查看完整回答
反对 回复 2023-09-15
  • 2 回答
  • 0 关注
  • 64 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信