Sortierte Liste aller Dateien in einem Verzeichnis – PHP-Funktion

Folgende PHP-Funktion erzeugt ein Array mit allen Dateinamen von einem oder mehreren Verzeichnis/sen. Die Liste wird aufsteigend oder absteigend sortiert zurückgegeben. Der Sortieralgorithmus lässt sich durch sort_flags einstellen.

/**
 *
 * @author Vitus Lehner
 * @version 2011-11-28
 * @param $dirs string|array Directory or array of directories that will be scanned.
 * @param $order_by string Orders the file list ASC or DESC. Default: ASC
 * @param $sort_flag int Sorting behaviour. See sort_flags http://de.php.net/manual/en/function.sort.php. Default: SORT_STRING
 * @return array Ordered list of files of given directory/ies.
 *
*/
function scan_dir_files ( $dirs, $order_by = 'ASC', $sort_flag = SORT_STRING ) {
	$files = array ( );
	if ( is_array ( $dirs ) ) {
		foreach ( $dirs as $dir ) {
			$files = array_merge ( $files, scan_dir_files ( $dir ) );
		}
	} else {
		$dir = scandir ( $dirs );
		foreach ( $dir as $file ) {
			if ( is_file ( $dirs . '/' . $file ) ) {
				$files[] = $file;
			}
		}
	}
	if ( $order_by === 'DESC' ) {
		rsort ( $files, $sort_flag );
	} else {
		sort ( $files, $sort_flag );
	}
	return $files;
}

Beispiele:

<?php
foreach(scan_dir_files('./ordner') as $datei){
    echo "$datei\r\n";
}
?>
<?php
$ordner = array('ordner1', 'ordner2');
$dateien = scan_dir_files($ordner, 'DESC', SORT_REGULAR);
foreach($dateien as $datei){
    echo "$datei\r\n";
}
?>

Dieser Artikel wurde vertaggt mit , , , , , .
Kategorien: Funktionen, PHP

Hat Ihnen dieser Artikel gefallen? - Dann abonnieren Sie vlblog um über neue Themen rund ums Web informiert zu werden.

3 Kommentare zu “Sortierte Liste aller Dateien in einem Verzeichnis – PHP-Funktion”

  1. Du könntest noch “Aktuelles Verzeichnis” (.) und “Tieferes Verzeichnis” (..) herausfiltern – die brauch man immerhin nicht.

    Ansonsten eine schöne Funktion.

    Grüße,
    Nico

    • vitus37 sagt:

      Hallo Nico,

      die werden im Prnzip herausgefiltert, als mit is_file() geprüft wird, ob es sich bei den von scandir() gelieferten Pfaden um Dateien handelt.

      Gruß

  2. What if filenames in subfolders are equal??
    example:
    tmp1/file.php
    tmp2/file.php
    scan_dir_files(array(‘tmp1′,’tmp2′));
    result = array(‘file.php’,'file.php’);
    !?!?
    better $files[] = $file;
    to $files[] = $dir . $file;
    or $files[$dir] = $file;
    + is_dir before scan_dir – means less horror

Hinterlasse eine Antwort