Trier un tableau multidimensionnel en PHP
Il arrive parfois que l'on doivent trier un tableau contenant d'autres tableau suivant des valeurs pas directement accessibles. En soit on se retrouve bloqué car les fonctions de tries classique (asort(), ksort() ...) ne permettent pas de trier comme on le souhaite notre tableau.
Sachez qu'il n'est pas si compliqué d'arriver à trier un tableau multidimensionnel, il suffit d'utiliser la fonction array_multisort(), qui peut paraître compliqué au premier abort, mais qui ne l'est pas tant que ça.
Prenons l'exemple du tableau suivant
$tab = array( array( 'tpsEcoute' => 256, array('artiste' => 'Artiste 1', 'titre' => 'Titre 1') ), array( 'tpsEcoute' => 358, array('nom' => 'Artiste 2', 'titre' => 'Titre 2') ), array( 'tpsEcoute' => 300, array('nom' => 'Artiste 3', 'titre' => 'Titre 3') ) );
Pour pouvoir trier ce tableau suivant les valeurs de la variable tpsEcoute il faudra extraire cette variable afin qu'elle puisse être utilisé pour le tri.
On va pour cela générer un nouveau tableau contenant uniquement la liste des valeurs tpsEcoute avec la même clé que celle du tableau où elles se trouvent dans celui d'origine ($tab).
On extrait donc ces valeurs dans un nouveau tableau à l'aide d'une boucle :
$tabTempsEcoute = array(); foreach ($tab as $key => $value) { $tabTempsEcoute[$key] = $value['tpsEcoute']; }
Maintenant que l'on a des données pouvant permettre au trie depuis la valeur que l'on souhaite (tpsEcoute), on utilise la fonction array_multisort() de la façon suivante :
array_multisort($tabTempsEcoute, SORT_DESC, $tab);
On indique comme premier paramètre le tableau des valeurs permettant le trie du tableau d'origine, en second paramètre la façon dont le tableau doit être trié (ici SORT_DESC pour le trier dans un ordre décroissant) puis en troisième paramètre le tableau a trier de la sorte.
On obtiendra donc au final ceci :
$tab = array( array( 'tpsEcoute' => 256, array('artiste' => 'Artiste 1', 'titre' => 'Titre 1') ), array( 'tpsEcoute' => 300, array('nom' => 'Artiste 3', 'titre' => 'Titre 3') ), array( 'tpsEcoute' => 358, array('nom' => 'Artiste 2', 'titre' => 'Titre 2') ) );
Le tableau est maintenant dans l'ordre souhaité.
Catégories : PHP
Par Guillaume le 08/05/2016 à 00:41