Trier un tableau multidimensionnel
1. Le problème :
Nous avons un répertoire contenant plusieurs fichiers, nous voulons les afficher en faisant un tri sur la taille, la date de création etc.
2. Marche à suivre :
- récupérer les fichiers du répertoire.
- les mettre dans un tableau multidimensionnel.
- trier notre tableau.
En décomposant la tache en plusieurs parties, on s'aperçoit que ce n'est pas si compliqué que ça, et pourtant ça semblait difficile :)
allez, on se lance :
1./2. lecture des fichiers, mise en tableau :
$rep = "NOTRE/REPERTOIRE/"; $dir = opendir($rep); while ($f = readdir($dir)){ if(is_file($rep.$f)){ $sizeMo = filesize($rep.$f) / 1024 / 1024; //la taille du fichier en Mo $liste1[] = "$f"; //le nom du fichier $liste1[] = number_format($sizeMo, 2, ",", " "); //la taille en format 7,66 $liste1[] = df(filectime($rep.$f)); //la date de création au format FR (voir df() plus bas) $liste1[] = filectime($rep.$f);//la date de création au format timestamp (nous servira pour le tri) $liste[] = $liste1; //on met notre tableau liste1 dans un autre tableau (le gros multidimensionnel) } } function df($date) {//pour convertir une date au format FR return date("d/m/Y H:i:s",$date); } |
après cette opération le résultat pourrait ressembler à ça :
fichier1 10 01/05/2007 0123654747899 (exemple du timestamp) fichier2 20 01/05/2007 0123654747899 fichier3 15 11/14/2006 0123654747899 fichier7 10 21/08/2007 0123654747899 fichier6 150 01/05/2005 0123654747899 etc.
3. tri de notre tableau :
foreach ($liste as $key =>$row) { $nom[$key] = $row[0];//c'est la colonne des nom de fichiers$taille[$key] = $row[1];//des tailles $date1[$key] = $row[2];//des dates fr $date2[$key] = $row[3];//des dates } array_multisort($date2, SORT_DESC, $nom, SORT_ASC, $liste);//la fonction de tri |
et voilà, notre tableau est trié par date de création dans notre cas, on peut maintenant le parcourir et l'afficher comme on veut.
bons tests :)
Pour en discuter : http://forum.naeh.net/index.php?topic=33.0