Vous consultez les articles taggés tri
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
        )
 
)
*/
Fév
7

Plugin Jquery Tablesorter : Trier sur un numéro de téléphone

Par défaut, le plugin tablesorter jquery ne gère pas bien le tri sur une colonne contenant des numéros de téléphone. La raison ? C’est parce que le plugin détecte le numéro comme une chaine de texte, du coup le tri ne se fait pas correctement. On peut bien essayer de préciser lors de l’initialisation qu’il faudra trier cette colonne comme un numérique, le tri ne fonctionnera pas mieux, tout simplement car généralement un numéro de téléphone contient des caractères alphanumériques tels que « . » ou « -« , du coup le tri ne se fait que sur les 2 premiers chiffre du numéro.

J’ai donc créé un nouveau parseur pour gérer le tri sur mes numéros de téléphone. La méthode est très simple, je supprime tous les caractères non numérique lors du tri et effectue ainsi un tri purement numérique.

    $.tablesorter.addParser({
      // set a unique id
      id: 'phoneNumber',
      is: function(s) {
        // return false so this parser is not auto detected
        return false;
      },
      format: function(s) {
                return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9]/g),""));
        },
      // set type, either numeric or text
      type: 'numeric'
    });
Août
25

Tri de tableaux et danse folklorique

Si, comme nous, vous développez au quotidien, vous êtes sans aucun doute régulièrement confrontés à la problématique du tri de tableaux. Vous savez alors certainement qu’il existe différents algorithmes de tri.

Les étudiants de l’université roumaine de Sapienta ont eu la bonne (et drôle) idée d’illustrer ces algorithmes par des chorégraphies de danses hongroises. C’est vraiment sympa à regarder, et c’est un moyen ludique d’apprendre un algorithme !

 

Ils ont également une page Facebook et une chaîne sur Youtube si vous voulez visionner davantage de vidéos.

Août
5

Trier sur une date française avec Tablesorter

Si vous utilisez le plugin tablesorter de JQuery, il se peut que vous ayez besoin de trier un colonne contenant des dates au format français. Par défaut, le tri va se faire comme si le contenu était une chaine, du coup, ce ne sera pas trié dans le bon ordre.

Pour faire ceci, il vous suffit d’ajouter ce morceau de js.

$('#listeOrganismes').tablesorter({
  dateFormat: 'uk',
  headers: {
     0: {sorter: "shortDate"},
     5: {sorter: false}
  }
});

Si vous utilisez le plugin datatables de JQuery, que personnellement je préfère, c’est ici que ça se passe

Jan
27

Tri sur les dates FR avec DataTables

Par défaut, avec le plugin JQuery DataTables, on ne peut pas trier sur des dates francaises JJ/MM/AAAA

Pour cela il faut modifier le fichier jquery.dataTables.js et ajouter dans _oExt.aTypes la function suivante :
ATTENTION, mettez la comme première fonction, car les fonctions sont traitées dans l’ordre, et il faut que dans le cas d’un date FR, ce soit bien le résultat de cette fonction qui soit pris en compte en premier, sinon la date serait détectée comme une date mais au format US

function ( sData )
{
 
	var reg=new RegExp("(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20|21)[0-9]{2}","g");
	if (sData.match(reg))
	{
 
		return 'uk_date';
	} else {
 
	}
	return null;
} ,

Cela correspond à la ligne 669 dans la version 1.6

Ensuite avant l’initialisation de votre datatable, vous devez ajouter ceci

$.fn.dataTableExt.oSort['uk_date-asc']  = function(a,b) {
 
	var ukDatea = a.split('/');
	var ukDateb = b.split('/');
 
	var x = (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
	var y = (ukDateb[2] + ukDateb[1] + ukDateb[0]) * 1;
 
	return ((x &lt; y) ? -1 : ((x &gt; y) ?  1 : 0));
};
 
$.fn.dataTableExt.oSort['uk_date-desc'] = function(a,b) {
	var ukDatea = a.split('/');
	var ukDateb = b.split('/');
 
	var x = (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
	var y = (ukDateb[2] + ukDateb[1] + ukDateb[0]) * 1;
 
	return ((x &lt; y) ? 1 : ((x &gt; y) ?  -1 : 0));
};

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