Dateien nach Datum sortieren
Codeschnipsel | letzte Änderung am 04. April '10 um 12:11 Uhr
Es ist mit PHP sehr einfach Dateien aus einem Verzeichnis auszulesen und sich diese dann in einer Liste ausgeben zu lassen. Doch wie sortiert man diese Dateien dann zum Beispiel nach dem Datum, an dem die Datei zuletzt geändert wurde?
Um dieses Problem zu lösen bietet sich die Funktion usort() an! Sämtliche Dateien, samt Änderungszeitpunkt, speichern wir dazu in einem Array und übergeben es dann unserer Sortierfunktion!
<?php
$files = array(); // files
$path = './files/'; // directory path
// get files and save them in $files
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..') {
$filetime = filemtime($path . $file);
$files[] = array('filename' => $file ,
'filetime' => $filetime ,
'timediff' => time() - $filetime ,
'filesize' => filesize($path . $file) ,
);
}
}
closedir($handle);
}
function sortByFiletime($a, $b) {
if ($a['filetime'] == $b['filetime']) {
return 0;
}
return ($a['filetime'] < $b['filetime']) ? -1 : 1;
}
usort($files, 'sortByFiletime');
echo '<pre>', print_r($files), '</pre>';
Die Sortierung erfolgt nun in aufsteigender Reihenfolge. Möchten wir absteigend sortieren, müssen wir dazu lediglich den Vergleich innerhalb der Funktion sortByFiletime() anpassen.
// absteigend sortieren
return ($a['filetime'] > $b['filetime']) ? -1 : 1;
Im Array $files können auch noch weitere Dateiinformation gespeichert werden. Die Zuordnung zur Datei bleibt bei der Sortierung erhalten!
Alternativ zur Lösung mit usort() können wir die Sortierung auch mit array_multisort() vornehmen.
<?php
// get last modification date of our files
$filetime = array();
foreach ($files as $file) {
$filetime[] = $file['filetime'];
}
// last modificated file first
array_multisort($filetime, SORT_ASC, $files);
// oldest file first
// array_multisort($filetime, SORT_DESC, $files);
echo '<pre>', print_r($files), '</pre>';