Verständnisproblem

Timbo12

Grünschnabel
Hallo zusammen,
ich möchte von einem Ordner alle Unterordner in einen Array schreiben.
Bekomme mit folgendem Code auch alle Unterordner per echo angezeigt.
wie kann ich jetzt alle Ordner und Unterordner in einen Array speichern schreiben und diesen zurückgeben.
Habe es schon versucht, bekomme aber nicht alle Ordner zurückgegeben. Nur die erste Unterebene.
PHP:
$arr=array();
function show_dir($dir, $arr)  
{      $handle = @opendir($dir);      
        while ($file = @readdir ($handle))      
       {         
          if (eregi("^\.{1,2}$",$file))          
{              
continue;          
}           
 if(is_dir($dir.$file))         
 {              
array_push($arr,$dir.$file."/");
echo $dir.$file."/<br>";             
 show_dir($dir.$file."/", $arr);         
 }        
}      
@closedir($handle); 
return $arr 
}    
show_dir($pfad."/", $arr);
Vielen Dank
Timbo12
 
Danke für Deine schnelle Antwort, kannst Du mir vielleicht auch sagen wie oder warum es so, wie ich es machen will nicht funktioniert!
Vielen Dank
Timbo12
 
Rekursiv arbeitet Dein Skript ja schon (eine Funktion ruft sich selber auf).
Ich würde $arr nicht übergeben, das kannst Du auch in der Funktion erzeugen und zurückgeben. Meines Wissens werden Parameter, die nicht Explizit als Referenz (mit &) übergeben werden nicht verändert zurückgegeben.
Ein Mehrdimensionales Array macht Sinn, da du damit auch die Ordnerstruktur wiedererkennst. Wenn Du komplette Pfade speicherst, tut es natürlich auch ein eindimensionales Array.
Dein Skript etwas anders:
PHP:
function show_dir($dir) {
    $arr=array();
    $handle = @opendir($dir);
    while ($file = @readdir ($handle)) {
        if (eregi("^\.{1,2}$",$file)) {
            continue;
        }
        if(is_dir($dir.$file)) {
            $temp=array();
            $temp['name']=$file;
            $temp['unterordner']=show_dir($dir.$file."/");
            $arr[]=$temp;
            //alternativ zu den letzten vier Zeilen:
            //ohne mehrdimensionales Array
            $arr[]=$dir.$file;
            array_merge($arr, show_dir($dir.$file."/"));
        }
    }
    @closedir($handle);
    return $arr
}

$arr=array();
$arr=show_dir($pfad."/");
//Damit Du siehst, wie das Array aufgebaut ist:
print_r($arr);
Wie immer habe ich das im Editor getippt und nicht getestet, also ohne Gewähr.

Gruß hpvw
 
Zurück