Archives mensuelles : juillet 2018

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");