ignorer les caractères accentués lors du tri en php dans un tableau multidimensionnel
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]);
});
}
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}
).