Rhodes: Wie ".." und "." nach scandir entfernen?

Hallo zusammen,

mit

$files = scandir($dir);

lese ich mit PHP ein Verzeichnis aus und schreibe die Dateinamen des VZ in ein Array. Jetzt enthält $files aber natürlich auch ".." und ".".

Leider weiss ich nicht, wie ich diese beiden Arraywerte aus $files eliminieren kann. Hat jemand einen Tipp?

Vielen Dank

Rhodes

  1. Leider weiss ich nicht, wie ich diese beiden Arraywerte aus $files eliminieren kann. Hat jemand einen Tipp?

    So wie man jeden anderen Key aus einem array entfernen würde - unset() ist z.B. eine der Möglichkeiten.

  2. Hallo Rhodes,

    zu suits Vorschlag könntest du das Verzeichniss auch rekursiv durchlaufen und das Array "per Hand" zusammen bauen.
    Dabei dann '.', '..' per if-Abfrage einfach ausschließen.

    Was scandir macht ist:
    "Returns an array of files and directories from the directory."

    Wenn du also nur ein Array mit den Dateinamen brauchst, wirst du auch mit Unterverzeichnissen Probleme bekommen. Dann bietet sich eine rekursive Funktion wieder an.

    Grüße, Matze

  3. Moin!

    mit

    $files = scandir($dir);

    lese ich mit PHP ein Verzeichnis aus und schreibe die Dateinamen des VZ in ein Array. Jetzt enthält $files aber natürlich auch ".." und ".".

    Das ist zwar die klassische Methode, es geht aber viel schöner. PHP bietet mit der SPL (Standard PHP Library) viele schöne Klassen an, die sehr mächtige Funktionen bereitstellen, um solche Standardaufgaben mit genauso einfachen Mitteln zu lösen, was den Codeaufwand angeht, aber an den entscheidenden Stellen der Weiterverarbeitung die Sache deutlich einfacher machen.

    Zum Durchsuchen eines Verzeichnisses nach Dateinamen würde sich beispielsweise anbieten:

    foreach (new DirectoryIterator('../moodle') as $fileInfo) {  
        if($fileInfo->isDot()) continue;  
        echo $fileInfo->getFilename() . "<br>\n";  
    }
    

    Siehe http://de3.php.net/manual/de/class.directoryiterator.php.

    - Sven Rautenberg