2 juin 2007 - 22:45Trier 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 :


<?php 
$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($sizeMo2","" "); //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 :


<?php 
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($date2SORT_DESC$nomSORT_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)

Pas de Commentaires | Catégorie : PHP / MySQL | Imprimer cet article Imprimer cet article