Tri de tableaux multi-dimensionnels

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 931 fois - Téléchargée 28 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
3 mai 2011 à 16:24
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
17 août 2008 à 23:01
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
17 août 2008 à 21:10
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
3 mai 2003 à 16:20
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.