PHP : classer un tableau d’objets avec usort

En PHP il arrive de se retrouver avec un tableau d’objets qui n’est pas ordonné comme on le voudrait, il faut dans ce cas utiliser la fonction usort qui permet de trier un tableau en utilisant une fonction de comparaison.

Imaginons nous avons un tableau « $list » d’objets « User », contenant -entre autre- les propriétés « Date » et « Name », Date étant un objet DateTime et Name un string

Pour trier par date il faut créer et appeler la fonction suivante (l’exemple peux s’appliquer à n’importe quel tri)

//on déclare la fonction de tri
orderByDate($a, $b) {
    //retourner 0 en cas d'égalité
    if ($a->date == $b->date) {
        return 0;
    } else if ($a->date < $b->date) {//retourner -1 en cas d’infériorité
        return -1;
    } else {//retourner 1 en cas de supériorité
        return 1;
    }
}
//appel de la fonction avec notre tableau $list, $list contiendra ensuite les "User" trié par date.
usort($list, "orderByDate");

Si votre fonction est dans une classe et que vous l’utilisez depuis cette même classe, il faut l’appeler comme ceci :

usort($list, array($this, "orderByDate"));

Dans le cas d’une comparaison de chaine (comme par exemple ici sur le nom) on peux simplifier la syntaxe en utilisant la fonction strcmp de la manière suivante :

//on déclare la fonction
orderByName($a, $b) {
    return strcmp($a->name, $b->name);
}
//appel de la fonction
usort($list, "orderByName");

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.