亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在多維數組中的 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] => Cable-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 關注
  • 147 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號