Vous consultez les articles taggés array_map
Fév
29

Trier la colonne d’un tableau sans prendre en compte la casse et les accents

Par défaut, la fonction array_multisort n’est pas casse sensitive et ne gère pas les accents.

Du coup avec un tableau contenant « Allemagne », « Enfant », « Équipe », « Toto », on se retrouve avec l’ordre suivant : Allemagne, Enfant, Toto, Équipe

Pour contourner cela, nous allons faire appel à la fonction array_map afin de nettoyer les données à trier.

<?php
$functionSansAccent = function ($chaine) {
        if (version_compare(PHP_VERSION, '5.2.3', '>='))
            $str = htmlentities($chaine, ENT_NOQUOTES, "UTF-8", false);
        else
            $str = htmlentities($chaine, ENT_NOQUOTES, "UTF-8");
 
        // NB : On ne peut pas utiliser strtr qui fonctionne mal avec utf8.
        $str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
 
        return $str;
};
 
$data[] = array('mots' => 'Toto', 'nb' => 2);
$data[] = array('mots' => 'Allemagne', 'nb' => 2);
$data[] = array('mots' => 'Enfant', 'nb' => 1);
$data[] = array('mots' => 'Équipe', 'nb' => 6);
 
// On récupére les valeur de la première colonne
foreach ($data as $key => $row) {
    $colSort[]  = $row['mots'];
}
 
 //$colSort = array("Allemagne", "Enfant", "Équipe", "Toto");
//On supprime les accents
  $array_sans_accent = array_map($functionSansAccent , $colSort);
//On met en minuscule
  $array_lowercase = array_map('strtolower', $array_sans_accent);
// Ajoute $data en tant que dernier paramètre, pour trier par la clé commune
  array_multisort($array_lowercase, SORT_ASC, $data);
 
  print_r($data);
/*
Le rendu sera
 
Array
(
    [0] => Array
        (
            [mots] => Allemagne
            [nb] => 2
        )
 
    [1] => Array
        (
            [mots] => Enfant
            [nb] => 1
        )
 
    [2] => Array
        (
            [mots] => Équipe
            [nb] => 6
        )
 
    [3] => Array
        (
            [mots] => Toto
            [nb] => 2
        )
 
)
*/

Edito

Bienvenue sur Mémorandom.

Mémorandom est le blog de 2 développeurs web, Appo et Nico.

Vous y trouverez des informations sur différents domaines touchant de près ou de loin au développement web

Tutoriels Yii Framework

Nos derniers articles

Blogs Dev

Liens

Étiquettes