Trier les clés accentuées d'un tableau associatif

Pour éviter la perte des étiquettes ayant la même popularité on range celles-ci dans un tableau associatif en utilisant l'étiquette comme clé et sa popularité comme valeur. Afin de les afficher d'une façon agréable on trie nos étiquettes alphabétiquement, en utilisant la fonction ksort() :

<?php

$ar = array
(
    'popé' => 4,
    'épinard' => 1,
    'carotte' => 5,
    'Marrons' => 6,
    'epsilon' => 1,
    'zéro' => 2,
    'popo' => 4,
    'Étourderie' => 2
);

ksort($ar);

echo '<pre>' . print_r($artrue) . '</pre>';

?>

Ce qui nous donne :

Array
(
    [Marrons] => 6
    [carotte] => 5
    [epsilon] => 1
    [popo] => 8
    [popé] => 4
    [zéro] => 7
    [Étourderie] => 2
    [épinard] => 1
)

Patatra ! C'est tout nul ! Les lettres accentuées sont toutes à la fin et "popé" vient après "popo". Voilà ce que c'est que de confier la responsabilité de concevoir des langages de programmation à des américains ! C'est le bordel total :-D

Qu'allons nous faire ?! Désespérer, maudire, s'en moquer… non ! Jetons plutôt un œil neuf sur le précédent billet expliquant comment supprimer l'accentuation des caractères accentués, et utilisons judicieusement la fonction uksort() :

<?php

function wd_unaccent_compare($a$b)
{
    return strcmp(wd_remove_accents($a)wd_remove_accents($b));
}

uksort($ar'wd_unaccent_compare');

?>

Ce qui cette fois-ci nous donne :

Array
(
    [Marrons] => 6
    [Étourderie] => 2
    [carotte] => 5
    [épinard] => 1
    [epsilon] => 1
    [popé] => 4
    [popo] => 8
    [zéro] => 7
)

C'est déjà bien mieux ! Hmm… ce serait toute de même sympa d'avoir "Marrons" et "Étourderie" au milieu de leurs petits copains. Un coup de strtolower() et on en parle plus :

<?php

function wd_unaccent_compare_ci($a$b)
{
    return strcmp(strtolower(wd_remove_accents($a))strtolower(wd_remove_accents($b)));
}

?>

Ce qui nous donne au final :

Array
(
    [carotte] => 5
    [épinard] => 1
    [epsilon] => 1
    [Étourderie] => 2
    [Marrons] => 6
    [popé] => 4
    [popo] => 8
    [zéro] => 7
)

Cette fois-ci, c'est merveilleux. Nous somme conquis, la foule hystérique acclame.

Cet article a frappé votre imagination ? Abonnez-vous pour être informé de ceux à venir.

Commenter

Un avis sur cet article ? Partagez-le et faites vous des amis (ou pas) !

Marquer

Del.icio.us / Google / Live / Ma.gnolia / Yahoo

1 commentaire

Spone
Spone a écrit : le 04 jun 2008

Woah merci ça c'est que du bonheur ! J'ai pu appliquer cette fonction à la liste de noms de pays localisés fournie par Zend Framework, et les États-Unis ne se retrouvent plus derrière le Zimbabwe =)

Laisser un commentaire

Pour ne pas retrouver mon blog noyé de spam à mon retour de vacances, les nouveaux commentaires devront attendre d'être approuvés pour apparaitre sur le blog. Je vous remercie de votre compréhension et vous souhaite un bel été.

 
 Souhaitez-vous être informé par E-Mail d'une réponse à votre message ?