levu: Algorithmus optimieren

Beitrag lesen

Hi Flo.

Am Anfang steht was drin wie "./plugins/" oder "./classes/". Der Algorithmus geht nun diese Verzeichnisse durch und guckt, ob sie noch Unterverzeichnisse haben. Wenn ja werden auch diese wieder analysiert.

Da wirst Du Dir das Leben erheblich leichter machen, wenn Du die Funktion rekursiv aufrufst.

Ja, ich wollte es eigentlich als Lambda-Funktion und deswegen ohne parameter und nicht rekursiv. Ich werde es jetzt rekursiv machen.

Das Problem ist, dass man in einer Schleife nichts zum Array hinzufügen oder aus dem Array entfernen kann, über das man iteriert.

1.: Doch, das kann man. Warum sollte man es nicht koennen?

weil sich php z.B. merkt "ich bin beim 3. Element" und wenn du jetzt das 2 löschst, hast du als nächstes das 4. (original das 5.) und das ehemalige 4. damit übersprungen

Nochmal ein paar Sachen zum Code. Eins vorneweg: Er ist annaehernd unlesbar, weil nicht kommentiert. Da solltest Du Deine Gewohnheiten dringend aendern.

Ja, das war nur schnell runtergetippt ;) sonst is er auch lesbarer inkl guten Variablennamen

Oder: Lass die Autoload-Funktion selber die ganze Arbeit machen und das erzeugte Array in einer statischen Variable speichern.

statt statisch nehme ich immer globale Variablen - statische sind aber auch ne gute idee :)

Mein neuer Code:

    function get_dirs_recursive($directory) {  
        $new = array();  
        $items = scandir($directory); //we have all items - even files  
        foreach ($items as $item) { //now we iterate over $items  
        //and we only want to have directories not starting with an .  
            if (is_dir($directory.$item) && substr($item, 0, 1) != '.') {  
                //we add the current subdirectory...  
                $new[] = $directory.$item.'/';  
                //...and all the ones below  
                $new = array_merge($new, get_dirs_recursive($directory.$item.'/'));  
            }  
        }  
        return $new;  
    }

Wie gesagt - es war der Versuch, so etwas als Lambda Funktion zu schreiben ;)

--
ie:{ br: fl:( va:) ls:& fo:| rl:( n4:( de:] ss:) ch:| js:| mo:| sh:( zu:)