Maxy.fr

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

Partager l'article :

Articles similaires

Enregistrer un tableau PHP dans un fichier

Il est parfois utile d'enregistrer dans un fichier des données en provenance d'un code PHP. Sachez qu'il est plutôt simple d'enregistrer un tableau de données dans un fichier en utilisant la fonction serialize().   Voici le code permettant d'enregistrer les données...

Utiliser la programmation pour résoudre un problème mathématiques

Vous avez sûrement entendu parlé de cet exercice de mathématiques qui fait tant parler de lui depuis quelques jours sur internet. Cet exercice a priori simple qu'un professeur Vietnamien a donné à faire à ses élèves d'une classe...

Lire plusieurs fois toutes les données récupérées avec fetch en PDO

Vous connaissez tous la méthode suivante pour lire une série de données enregistrées via MySQL : $listeRep = $bdd->query("SELECT * FROM registre ORDER BY id DESC"); while($listeData = $listeRep->fetch()) { echo $listeData['nom']; }   Vous...