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

Share