it-swarm.com.de

glob () - Sortiert nach Datum

Ich versuche, ein Array von Dateien in der Reihenfolge des Datums anzuzeigen (zuletzt geändert).

Ich habe diesen Kauf durch das Array geschlungen und in ein anderes Array sortiert.

46
cole

Im Interesse der Nachwelt ist der relevante Code für den Fall, dass der in der akzeptierten Antwort verknüpfte Forumsbeitrag verloren geht oder für einige unklar ist, Folgendes erforderlich: 

<?php

$myarray = glob("*.*");
usort($myarray, create_function('$a,$b', 'return filemtime($a) - filemtime($b);'));

?>

Getestet dies auf meinem System und verifiziert, dass es nach Wunsch nach Datei mtime sortiert. Ich habe einen ähnlichen Ansatz (in Python geschrieben) verwendet, um auch die zuletzt aktualisierten Dateien auf meiner Website zu ermitteln.

88
Jay
<?php
$items = glob('*', GLOB_NOSORT);
array_multisort(array_map('filemtime', $items), SORT_NUMERIC, SORT_DESC, $items);
35
Alf Eaton

Diese Lösung ist dieselbe wie akzeptierte Antwort , aktualisiert mit anonymer Funktion1:

$myarray = glob("*.*");

usort( $myarray, function( $a, $b ) { return filemtime($a) - filemtime($b); } );

1 Anonyme Funktionen wurden 2010 in PHP eingeführt. Die ursprüngliche Antwort stammt aus dem Jahr 2008.

12
fusion3k

Ich weiß, dass dieser Thread alt ist, aber dies kann mit einer besseren Leistung erreicht werden. Die usort() in der akzeptierten Antwort ruft filemtime() viele Male auf. PHP verwendet einen Quicksort-Algorithmus mit einer durchschnittlichen Leistung von 1.39*n*lg(n). Der Algorithmus ruft filemtime() zweimal pro Vergleich auf, also werden wir etwa 28 Aufrufe für 10 Verzeichniseinträge, 556 Aufrufe für 100 Einträge, 8340 Aufrufe für 1000 Einträge usw. Der folgende Code ist für mich gut und bietet eine hervorragende Leistung:

exec ( stripos ( PHP_OS, 'WIN' ) === 0 ? 'dir /B /O-D *.*' : 'ls -td1 *.*' , $myarray );
0
Sebastian