2
juin
2007
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

1 Etoile2 Etoiles3 Etoiles4 Etoiles5 Etoiles (aucun vote)

Catégories : PHP / MySQL | Pas de commentaires


Archives :

| octobre 2008 (2) | septembre 2008 (3) | mai 2008 (1) | mars 2008 (4) | février 2008 (3) | décembre 2007 (16) | novembre 2007 (2) | juin 2007 (1) | mai 2007 (2) | avril 2007 (1) | mars 2007 (2) | février 2007 (1) | janvier 2007 (3) |
© 2008 Naeh.net | Thème par DemusDesign (Modifié par Naeh), Theme Lab | Powered by WordPress

Naeh.net