Reihenfolge bei readdir()
der Stefan
- php
0 Cybaer0 der Stefan0 Cybaer
0 Michael Nagler
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
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
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
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
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
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
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
Danke,
das hat mir geholfen.
Die sort() Fkt. kannte ich noch gar nicht. So ist es ja wirklich sehr einfach.
mfg
Stefan