rekursives Verzeichnis sortiert ausgeben

NTDY

Erfahrenes Mitglied
Ich habe ein Script gefunden, das Verzeichnisse und Dateien rekursiv ausgibt. Nun wollte ich alle diese Verzeichnisse und Dateien in ein Array einlesen um die Ausgabe zu sortieren.

Also lese ich alles, was der Dateihandler findet in Array b[] ein uns ab Ende der Funktion nehme ich die sort Funktion um b zu sortieren.
Dann gebe ich außerhalb der Funktion das Array aus und was passiert?
Es werden nur die Dateien und Verzeichnisse ausgegeben, die im Ursprungsverzeichnis gefunden wurden.
Kann sich das einer erklären, da ich doch eigentlich vor jedem rekursiven Aufruf die Variable $files in das b[]-Array einlese.


PHP:
<?php
function rec_dir($dir){
    $handle = @opendir($dir);

    while($file=@readdir($handle)){
	if(eregi("^\.{1,2}$",$file)){
	    continue;
	}
	if(is_dir($dir.$file)){
	    echo "<b>$file</b><br>\n";
	    $b[]=$file;
	    rec_dir($dir.$file."/");
	}else{
	    if(is_dir($file)){
		$b[]=$file;
		rec_dir($file);
	    }else{
		echo "<i>$file</i><br>\n";
		$b[]=$file;
	    }
	}
	
    }
    return sort($b);
}
@closedir($handle);
$dew = rec_dir("/srv/www/htdocs/");

foreach($dew as $a=>$datei){
	echo $datei."<br>";
}
?>

Vielen Dank.

Andreas
 
Das liegt daran, weil b[] eine Funktionsvariable ist, die nur in der Funktion gültig ist. Selbst wenn Du die Funktion rekursiv aufrufst, so ist b[] immer nur für den einen Aufruf gültig. Somit bekommst Du b[] nur für den ersten Funktionsaufruf zurück. (Ist irgendwie schwierig zu erklären :))
Entweder Du globalisierst b[] oder Du hängst die Ergebnisse der rekursiven Aufrufe an b[] an.

snuu
 
Zurück