ignorer les caractères accentués lors du tri en php dans un tableau multidimensionnel


user1950349:

J'ai un tableau multidimensionnel comme indiqué ci-dessous dans lequel je veux faire un tri sur la base du [name]champ. De plus, les lettres accentuées doivent être triées comme si elles n'étaient pas accentuées.

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. 
                                )
                        )   
                )

        )

    [cambridge-chicago] => Array
        (
            [community_name] => Cambridge (Chicago), IL
            [areas] => Array
                (
                    [0] => Array
                        (
                            [name] => Array
                                (
                                    [0] => Avocados.
                                )
                        )
                    [1] => Array
                        (
                            [name] => Array
                                (
                                    [0] => Aṕple.
                                )
                        )   
                )

        )

)

Voici ce que je souhaite réaliser:

Array
(
    [chicago] => Array
        (
            [community_name] => Chicago, IL
            [areas] => Array
                (
                    [0] => Array
                        (
                            [name] => Array
                                (
                                    [0] => Administration.
                                )
                        )

                    [1] => Array
                        (
                            [name] => Array
                                (
                                    [0] => HELLO WORLD. 
                                )

                        )

                    [2] => Array
                        (
                            [name] => Array
                                (
                                    [0] => Hello
                                )
                        )
                )

        )

    [chicago-and-surrounding-areas] => Array
        (
            [community_name] => Chicago (and surrounding areas), IL
            [areas] => Array
                (
                    [0] => Array
                        (
                            [name] => Array
                                (
                                    [0] => Câble-Axion Digital Corp.
                                )
                        )
                    [1] => Array
                        (
                            [name] => Array
                                (
                                    [0] => Covit Corp. 
                                )
                        )   
                )

        )

    [cambridge-chicago] => Array
        (
            [community_name] => Cambridge (Chicago), IL
            [areas] => Array
                (
                    [0] => Array
                        (
                            [name] => Array
                                (
                                    [0] => Aṕple.
                                )
                        )
                    [1] => Array
                        (
                            [name] => Array
                                (
                                    [0] => Avocados.
                                )
                        )   
                )

        )

)

C'est ce que j'ai essayé mais je me demande si ça va marcher dans tous les cas. Dans certains cas, même après le tri, les lettres accentuées ont un rang inférieur à leurs homologues non accentués.

Je me demande quels changements je devrais apporter au code ci-dessous pour que les lettres accentuées soient triées comme si elles n'étaient pas accentuées.

foreach ($array as &$locality) {
    usort($locality['areas'], function ($a, $b) {
        // return $a['name'][0] <=> $b['name'][0];
        return iconv('UTF-8', 'ISO-8859-8//TRANSLIT', $a['name'][0]) <=> iconv('UTF-8', 'ISO-8859-8//TRANSLIT', $b['name'][0]);
    });
}
Plan:

Vous pouvez utiliser Normalizer pour séparer les caractères des signes diacritiques et les supprimer après pour obtenir les caractères de base.

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]);
    });
}    

Exemple de travail .

Déshabillez d' ici .

La prochaine fois, utilisez var_export , afin que nous puissions utiliser votre tableau pour tester le code :)

Liste des signes diacritiques (source de \x{0300}-\x{036f}).

Articles connexes


Ignorer les caractères dans un tableau flottant?

ReconIII J'enregistre un fichier Excel en tant que fichier .csv, ce qui lui donne le style de: 58884,1,2912,3,,0,0,3_A,05-May-11,3,5,2,7.18161941, ainsi, toutes les colonnes sont séparées par des virgules. Quand je lis le tableau, les données sont placées da

Caractères dupliqués dans un tableau multidimensionnel

aaaeka J'ai créé un chartableau multidimensionnel vide , mais lorsque j'essaie de modifier une valeur spécifique, il se duplique parfois dans un autre espace du tableau. Exemple: #include <iostream> using namespace std; char arr[2][2] = { 0 }; int main () {

Ignorer les valeurs nulles lors du tri par tableau dans MongoDB

Michal J'ai la collection MongoDB itemsavec les documents suivants: { "values" : [1, 2] } { "values" : [5, null] } { "values" : [-5, null] } Existe-t-il un moyen de trier cette collection par valuespropriété sans nullvaleurs? Ma requête actuelle est: db.items

Ignorer les accents de caractères lors du tri des chaînes

Nairou J'écris un programme golang, qui prend une liste de chaînes et les trie dans des listes de seaux par le premier caractère de la chaîne. Cependant, je veux qu'il regroupe les caractères accentués avec le caractère non accentué auquel il ressemble le plus

Entrez les valeurs dans un tableau multidimensionnel en php

HM Sadman Haque: J'essaie de créer un tableau multidimensionnel unique à partir de 2 tableaux dynamiquement en bouclant les deux tableaux. Code <?php $days = ["Monday","Tuesday","Wednesday"]; $rates = [40,60,80]; $profit = []; foreach($days as $day => $value)