Tri de tableaux multi-dimensionnels

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 185 fois - Téléchargée 26 fois

Contenu du snippet

array tri (array array, string critere)

retourne le tableau array, trié selon le critere de comparaison. Les tableaux a triés sont a deux dimensions: une liste de tableaux associatifs, et c'est la clé des tableaux associatifs qui sera utilisée comme critère.
Typiquement, c'est le genre de tableaux qu'on obtient quand on extrait des données d'une base.

Source / Exemple :


function cmp($ar1, $ar2, $key)
{
  return ( ($ar1[$key] > $ar2[$key]) ? 1 : ( ($ar1[$key] == $ar2[$key]) ? 0 : -1));
}

function tri($array, $critere)
{
  $cmp = create_function('$a, $b', 'return cmp($a, $b, "'.$critere.'");');
  uasort($array, $cmp);
  return $array;
}

Conclusion :


[Exemple]
$array = array(
array('nom'=>'Nicolas', 'age'=>21),
array('nom'=>'Zac', 'age'=>12),
array('nom'=>'Alice', 'age'=>8)
);

print_r(tri($array, 'nom')); // affiche le tableau trié par noms croissants
print_r(tri($array, 'age')); // affiche le tableau trié par ages croisants

A voir également

Ajouter un commentaire

Commentaires

cs_eikichi
Messages postés
9
Date d'inscription
mercredi 26 mars 2003
Statut
Membre
Dernière intervention
9 mai 2011
-
Bonjour a tous,

Que dois-je modifier pour obtenir un tri décroissant?

D'avance merci.
naholyr
Messages postés
28
Date d'inscription
dimanche 12 novembre 2000
Statut
Membre
Dernière intervention
11 septembre 2006
-
Ben une fonction qui retourne une valeur, si tu n'affectes pas cette valeur à quelque chose c'est normal que tu perdes l'information...

$tableau_trie = tri($tableau);
print_r($tableau_trie);
turcotda
Messages postés
1
Date d'inscription
dimanche 17 août 2008
Statut
Membre
Dernière intervention
17 août 2008
-
Salut.
Je trouve ce script intéressant pour une de mes applications, surtout que je ne suis pas tellement expérimenté avec les tableaux. J'ai donc incorporé ce script à mes programmes. Toutefois, si je fais la modif suivante à l'exemple de la conclusion:

initial...
print_r(tri($array, 'nom'));

remplacé par...
tri($array, 'nom');
print_r($array);

Le programme imprime le tableau dans l'ordre initial.

Pourquoi la commande return $array; ne retourne pas le tableau trié dans mon exemple ??? Quelle autre modif dois-je apporter ?
Merci èa l'avance pour vos commentaires.
dpitard
Messages postés
11
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
3 mai 2003
-
pr eviter que les clés en majuscule apparaissent avant les autres, il faut modifier cmp:
function cmp($ar1, $ar2, $key)
{
return ( (strtoupper($ar1[$key]) > strtoupper($ar2[$key])) ? 1 : ( (strtoupper($ar1[$key]) == strtoupper($ar2[$key])) ? 0 : -1));
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.