der Stefan: Reihenfolge bei readdir()

Hallo,
ich habe folgendes Verständnisproblem.

Meine PHP-Referenz sagt mir: "readdir()" gibt den Inhalt des Verzeichnisses unsortiert aus.

heißt "unsortiert" einfach nur "nicht (z.B. alphabetisch) sortiert"
oder wird das Verzeichnis nach irgendeinem später nicht nachvollziehbaren Zufallsprinzip gelesen?

Also, wenn ich beim erstenmal Auslesen Dateien in der Reihenfolge
c,a,b,d erhalte. Ist es dann möglich, dass ich zu einem späteren Zeitpunkt die Dateien in einer anderen Reihenfolge erhalte (d,c,a,b)?
Oder ist es immer dieselbe unsortierte Reiehnfolge?

Wenn mir das jemand erklären könnte, würde mir das echt helfen.
mfg
Stefan

  1. Hi,

    heißt "unsortiert" einfach nur "nicht (z.B. alphabetisch) sortiert"
    oder wird das Verzeichnis nach irgendeinem später nicht nachvollziehbaren Zufallsprinzip gelesen?

    Es ist nachvollziehbar und nicht zufällig.

    Also, wenn ich beim erstenmal Auslesen Dateien in der Reihenfolge
    c,a,b,d erhalte. Ist es dann möglich, dass ich zu einem späteren Zeitpunkt die Dateien in einer anderen Reihenfolge erhalte (d,c,a,b)?

    Ja.

    Oder ist es immer dieselbe unsortierte Reiehnfolge?

    Kommt drauf an.

    Wenn mir das jemand erklären könnte, würde mir das echt helfen.

    Die Dateien werden in der Reihenfolge gelistet, wie sie ins Verzeichnis gekommen sind (AFAIR könnte es aber sein, daß es da Unterschiede von OS zu OS gibt). Wird nun eine Datei gelöscht und kommt eine neue hinzu (ggf. reicht auch das bloße Umbenennen), so verschiebt sich ggf. die Reihenfolge.

    Nachvollziehbar ist es also nur mit Bezug auf das verwendete Dateisystem und die sonstigen Dateiaktivitäten, zufällig jedoch nie (denn jedes Dateisystem folgt ja seinen Regeln). Das ist aber PHP ziemlich egal (und das muß es, als OS im Allgemeinen und Dateisystem im Besonderen übergreifende Sprache auch sein).

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hallo cybaer,
      danke fü deine Antwort.

      Die Dateien werden in der Reihenfolge gelistet, wie sie ins Verzeichnis gekommen sind (AFAIR könnte es aber sein, daß es da Unterschiede von OS zu OS gibt). Wird nun eine Datei gelöscht und kommt eine neue hinzu (ggf. reicht auch das bloße Umbenennen), so verschiebt sich ggf. die Reihenfolge.

      Das heißt: Wenn ich gar keine Änderungen in dem Ordner vornehme, dann werden die Dateien auch immer in der gleichen unsortierten Reihenfolge ausgegeben? Ist das richitg?

      mfg
      Stefan

      1. Hi,

        Das heißt: Wenn ich gar keine Änderungen in dem Ordner vornehme, dann werden die Dateien auch immer in der gleichen unsortierten Reihenfolge ausgegeben? Ist das richitg?

        Wenn *niemand* daran Änderungen vornimmt: Ja.

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. Hallo,

    Meine PHP-Referenz sagt mir: "readdir()" gibt den Inhalt des Verzeichnisses unsortiert aus.

    Das PHP Manual sagt dazu folgendes:

    Returns the filename of the next file from the directory. The filenames are returned in the order in which they are stored by the filesystem.

    Wenn die Sortierung so wichtig ist, mach es doch einfach selbst:

    <?php
    // Ab PHP V4.0.0-RC2
    $files = array();
    if( $handle = opendir('/path/to/files'))
    {

    while (false !== ($file = readdir($handle))) {
           $files[] = $file;
       }
       closedir($handle);

    // sortieren:
       $files = sort( $files );
       reset( $files );
    }
    ?>

    Viele Grüße,
    Michael

    --

    <img src="http://www.nailware.de/images/nailware_logo.jpg" border="0" alt="">
    --
    <img src="http://www.nailware.de/images/no_epatents.gif" border="0" alt="">
    Online Petitionen gegen Software Patente:
    http://petition.eurolinux.org/index_html?LANG=de
    1. Hallo!

      Du kannst auch zusätzlich noch mittels is_dir() zwischen Ordnern und Dateien unterscheiden. So könntest du zum Beispiel anhand der Funktion Ordner und Dateien in zwei unterschiedliche Arrays schrieben, diese jeweils sortieren, und dann Ordner und Dateien getrennt in frei wählbarer Sortierreihenfolge ausgeben.

      Gruß

      Matthias

      --
      ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
      http://www.makaio.de/quotations
      1. Hallo,

        Du kannst auch zusätzlich noch mittels is_dir() zwischen Ordnern und Dateien unterscheiden. So könntest du zum Beispiel anhand der Funktion Ordner und Dateien in zwei unterschiedliche Arrays schrieben, diese jeweils sortieren, und dann Ordner und Dateien getrennt in frei wählbarer Sortierreihenfolge ausgeben.

        Jo - außerdem kann man auch die meist nicht gewünschten "." und ".." filtern...

        Viele Grüße,
        Michael

        --

        <img src="http://www.nailware.de/images/nailware_logo.jpg" border="0" alt="">
        --
        <img src="http://www.nailware.de/images/no_epatents.gif" border="0" alt="">
        Online Petitionen gegen Software Patente:
        http://petition.eurolinux.org/index_html?LANG=de
        1. Danke,
          das hat mir geholfen.
          Die sort() Fkt. kannte ich noch gar nicht. So ist es ja wirklich sehr einfach.
          mfg
          Stefan