ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
2667
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Metha ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    97
    Moin Moin,

    hänge jetzt schon seit Stunden vor dem vermeintlich banalem Problem, ein Verzeichnis rekursiv zu durchlaufen.

    PHP-Code:
    function readdirs($path$array=NULL)
        {
        
    $entrys=scandir($path);
        foreach(
    $entrys as $part)
            {
            if(
    is_dir($path.$part) && preg_match('/^\[t\]_(.+)/i'$part$hit))
                {
                
    $array[]=array('path' => $path.$hit[0], 'name' => $path.$hit[1]);
                }
            if(
    is_dir($path.$part) && !preg_match('/^(.|..)$/i'$part$hit))
                {
                
    readdirs($path.$part.'/'$array);
                }
            }
        return(
    $array);
        }

    # Funktionsaufruf
    $test=readdirs($_SERVER['DOCUMENT_ROOT'].'/');
    print_r($test); 
    Die Funktion soll mir alle Ordner mit den anfangszeichen '[t]_' in ein Array speichern und zurückgeben.

    Ich bekomme aber nur immer den ersten Ordner auf den dies zutrifft zurück!

    Ich hoffe ich sehe einfach den Wald vor lauter Bäumen nicht?!
    Jemand ne Idee wo mein Fehler ist?

    Gruß Metha
     

  2. #2
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.449
    Du verarbeitest ja auch nicht den Rückgabewert des Rekursionsaufrufs weiter. Diesen müsstest du aber mit $array vereinigen.
     
    Markus Wulftange

  3. #3
    Metha ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    97
    Tut mir leid, ich komme nicht drauf!

    Ich komme immer wieder nur auf das selbe Ergebnis wie vorher…
    Kannst du mir nen Ansatz schreiben?
     

  4. #4
    Dark Ranger ist offline Mitglied Brokat
    Registriert seit
    Aug 2005
    Beiträge
    436
    PHP-Code:
    if(is_dir($path.$part) && !preg_match('/^(.|..)$/i'$part$hit)) 
                { 
                
    readdirs($path.$part.'/'$array); 
                } 
            } 
    Schau dir den Textabschnitt mal an, deine readdirs Funktion liefert ein Array zurück, du machst aber nichts mit dem Rückgabewert. Du musst also den Rückgabewert mit dem Array zusammenführen, welches du bereits in deiner readdirs Funktion hast.
     

  5. #5
    Metha ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    97
    Ok, wie dumm von mir! Nun läuft die Funktion – und Danke für die Hilfe!

    Wen es interessiert:

    PHP-Code:
    function readdirs($path$value=NULL)
        {
        
    $array=array();
        if(
    is_array($value))
            {
    $array=array_merge($array$value);}

        
    $entrys=scandir($path);
        foreach(
    $entrys as $part)
            {
            if(
    is_dir($path.$part) && !preg_match('/^(.|..)$/i'$part$hit))
                {
                if(
    preg_match('/^\[t\]_(.+)/i'$part$hit))
                    {
    $array[]=array('path' => $path.$hit[0], 'name' => $path.$hit[1]);}
                
    $array=readdirs($path.$part.'/'$array);
                }
            }
        return(
    $array);
        } 
     

  6. #6
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.449
    Falls du das Ganze iterativ und nicht rekursiv lösen möchtest:
    PHP-Code:
    function readdirs($path)
    {
        
    $path realpath($path);
        if (!
    $path) {
            return 
    false;
        }
        
    $stack = array($path);
        
    $matches = array();
        while (
    $path array_pop($stack)) {
            
    $dh opendir($path);
            while (
    $file readdir($dh)) {
                if (
    $file == '.' || $file == '..') {
                    continue;
                }
                if (
    is_dir($path.'/'.$file)) {
                    if (
    preg_match('/^\[t\]_(.+)/i'$file$match)) {
                        
    $matches[] = array(
                            
    'path' => $path.'/'.$file,
                            
    'name' => $path.'/'.$file,
                        );
                    }
                    
    array_push($stack$path.'/'.$file);
                }
            }
        }
        return 
    $matches;

     
    Markus Wulftange

Ähnliche Themen

  1. Verzeichnis rekursiv auslesen, readdir-Fehler?
    Von Stephan Liebig im Forum PHP
    Antworten: 3
    Letzter Beitrag: 22.03.10, 15:45
  2. Verzeichnis löschen (rekursiv)
    Von mtk-flo im Forum PHP
    Antworten: 2
    Letzter Beitrag: 16.06.08, 10:44
  3. Antworten: 2
    Letzter Beitrag: 29.08.05, 14:55
  4. CTreeCtrl rekursiv durchlaufen
    Von Ravebaby im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 28.03.05, 17:17