Trier un tableau à plusieurs dimensions

rozierromain
Invité n'ayant pas de compte PHPfrance

24 juil. 2007, 13:36

salut à tous

malgré mes recherches sur le site, je n'arrive pas à faire quelquechose qui sera élémentaire pour vous : trier un tableau à plusieurs colones:

il est de la forme :
$tab[1]['Nom'] = "Durand";
$tab[1]['age']= "21";
$tab[2]['Nom'] = "Dupont";
$tab[2]['age'] = "32";
je voudrais faire un tri alphabétique sur la colonne "Nom".

Je voudrais que ça donne :
$tab[1]['Nom'] = "Dupont";
$tab[1]['age']= "32";
$tab[2]['Nom'] = "Durand";
$tab[2]['age'] = "21";
Merci de m'aider, si possible avec du code pour que je puisse m'en inspirer

ViPHP
ViPHP | 928 Messages

24 juil. 2007, 13:39

Pas du chercher beaucoup, puisque le même problème a été traité il y a une heure ;)

usort() est ton amie :
function usort_callback($a, $b)
{
   return (strcmp($a['Nom'], $b['Nom']));
}

usort($tab, 'usort_callback');

ViPHP
ViPHP | 1380 Messages

24 juil. 2007, 16:08

Pour de gros tableaux ou pour un script où le gain de temps a de l'importance, préférer array_multisort() de l'ordre de 5 fois plus rapide.

Des tris de deuxième ordre ou troisième ordre sont également faciles à mettre en oeuvre (trier sur le nom, pour deux noms similaires, sous-trier sur l'âge décroissant etc...).

$cleTriNom = $cleTriAge = array();
foreach ($tableau as $v){
  $cleTriNom[] = $v['nom'];
  $cleTriAge[] = $v['age'];
}
array_multisort($cleTriNom, SORT_ASC, $cleTriAge, SORT_DESC, $tableau);
ripat