2009-07-02 9 views
5

Nous pouvons obtenir les fichiers dans un répertoire en PHP par

$files = new DirectoryIterator() 

après est-il un moyen facile de trier les éléments dans un ordre particulier pour les afficher? Merci.

+0

@ 動靜 能量 - Êtes-vous chinois? –

+2

[salathe/spl-examples - Tri des itérateurs] (https://github.com/salathe/spl-examples/wiki/Sorting-Iterators) – hakre

Répondre

9

Il ne semble pas qu'il existe un moyen de trier les données dans l'itérateur.

Vous pouvez placer les données d'affichage dans un tableau intermédiaire, avec une clé de la valeur que vous souhaitez trier, et appeler ksort() sur le tableau. Cela prendra deux passes sur les données cependant.

$path = "."; 
$files = new DirectoryIterator($path); 
$files_array = array(); 

while($files->valid()) { 
     // sort key, ie. modified timestamp 
     $key = $files->getMTime(); 
     $data = $files->getFilename(); 
     $files_array[$key] = $data; 
     $files->next(); 
} 
ksort($files_array); 
foreach($files_array as $key => $file){ 
    print $key . " => " . $file . "\n"; 
} 

modifier:

si vous placez toutes les informations que vous voulez afficher les fichiers dans les valeurs de tableau, vous pouvez simplement imploser() le tableau après, au lieu de boucle à travers les données une fois encore.

-4
$files = new DirectoryIterator($path); 
$i = 0; 
$paths = array(); 
while($files->valid()) { 
    $paths[$i++] = $files->getFileName(); 
    $files->next(); 
} 
sort($paths) 

Peut-être ce que vous cherchez, vous pouvez toujours appliquer bien sûr la fonction de tri pour trier les chemins en fonction de votre préférence après.