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

我有如下所示的多维数组,我想在其中基于[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. 

                                )

                        )   

                )


        )


慕标5832272
浏览 101回答 2
2回答

喵喵时光机

使用 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”使用一组默认规则,这些规则似乎会根据需要忽略重音,但您可以为特定于语言的排序顺序指定实际区域设置。

长风秋雁

您可以使用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]);    });}    
打开App,查看更多内容
随时随地看视频慕课网APP