Ich hätte gerne eine möglichkeit zu sortieren das entweder die ältesten
oder neuesten Einträge/Datein als erstes angezeigt werden.
Kann mir jemand sagen wie ich das hinbekomme? (Am besten direkt
den codeschnippsel entsprechend anpassen.)
Edit:
In den Datein befindet sich immer folgendes
$item_id = "1"; (bzw. 2,3,4,5 etc.)
Danach könnte man ggf. auch sortieren.
Helge M. schrieb:> Ich hätte gerne eine möglichkeit zu sortieren das entweder die ältesten> oder neuesten Einträge/Datein als erstes angezeigt werden.
Zwei Schleifen. Einmal über alle Einträge laufen, einmal "stat" für
jeden Dateinamen machen, das in ein Array speichern.
Das kannst du dann nach Größe, Datum, Besitzer, Inode-Nr oder sonstwas
sortieren.
Zweite Schleife dann über das Sortierte Array.
Du baust dir eine Hilfsfunktion sortByModTime( $einArray) die das
sortierte Array zurückliefert. Als Parameter erhält die Funktion ein
Array mit Dateinamen, also das was glob liefert.
Die Änderungszeit einer Datei kannt du mit
https://www.php.net/manual/en/function.filemtime.php
rausbekommen. Nach der Zeit sortierst die files. Du baust dir einfach
ein neues array als Assoziatives Array, mit der Zeit als Index, nach dem
sortiert du wenn du das Array das als Paramter durchgelaufen bist.
statt glob(....) rufst du dann sortByModTime(glob(...)) auf.
Wenn nach dieser id-Geschichte sorotert werden soll, schreibst du dir
eine weitere Funktion dafür.
Herbert B. schrieb:> Du baust dir eine Hilfsfunktion sortByModTime( $einArray) die das> sortierte Array zurückliefert. Als Parameter erhält die Funktion ein> Array mit Dateinamen, also das was glob liefert.>> Die Änderungszeit einer Datei kannt du mit> https://www.php.net/manual/en/function.filemtime.php> rausbekommen. Nach der Zeit sortierst die files. Du baust dir einfach> ein neues array als Assoziatives Array, mit der Zeit als Index, nach dem> sortiert du wenn du das Array das als Paramter durchgelaufen bist.>> statt glob(....) rufst du dann sortByModTime(glob(...)) auf.>> Wenn nach dieser id-Geschichte sorotert werden soll, schreibst du dir> eine weitere Funktion dafür.
naja, die Zeit als Index könnte doppelte Einträge haben die dann
überschrieben würden.
Wenn, dann muss das n Array im Array werden ...
[12345]['file1','file2', ...]
Wobei die Anforderung schon ein wenig schräg ist.
Wenn ich alle Dateien in einem Verzeichnis include, und dabei eine
bestimmte Reihenfolge brauche, dann vmtl. wegen Abhängigkeiten zwischen
den Dateien. Und die Abhängigkeiten würde ich ungern dadurch definieren,
wann ich das letzte Mal mit dem Editor an der Datei war.
Besser:
database/01_basis.php
database/10_erweiterung.php
database/99_ende.php
etc.
glob() sortiert direkt alphabetisch (solange man das nicht explizit
anders haben will) und schon hat man das Problem erschlagen.
Danke für die Antworten, ich bin allerdings etwas überfordert damit.
Kann mir vllt. jemand den Codeschnippsel oben entsprechend anpassen?
> glob() sortiert direkt alphabetisch (solange man das nicht explizit> anders haben will) und schon hat man das Problem erschlagen.
Ich habe derzeit
database/item1.php
database/item2.php
...
Die Sortierung scheint entsprechend zu funktionieren, allerdings würde
ich gerne die Reihenfolge umkehren und das
scheint über glob nicht zu funktionieren oder?
> Wenn nach dieser id-Geschichte sorotert werden soll, schreibst du dir> eine weitere Funktion dafür.> naja, die Zeit als Index könnte doppelte Einträge haben die dann> überschrieben würden.> Wenn, dann muss das n Array im Array werden ...
Vllt sollte man dann doch besser hier nach sortieren?
> In den Datein befindet sich immer folgendes> $item_id = "1"; (bzw. 2,3,4,5 etc.)
Eigentlich funktioniert das gut, nur leider handelt es sich um das
letzte Änderungsdatum und nicht um das Erstellungsdatum der Datei. Eine
kurze recherche ergab das es unter unix/linux wohl kein Erstellungsdatum
gibt.
Daher würde ich dann doch lieber hiernach sortieren:
> In den Datein befindet sich immer folgendes> $item_id = "1"; (bzw. 2,3,4,5 etc.)
Eigentlich kann das ja wirklich nur eine Kleinigkeit sein aber ich weiß
grad nicht wie. Kann mir jemand den Code aus meinem letzten post
entsprechend anpassen? :)
Helge M. schrieb:> Die Sortierung scheint entsprechend zu funktionieren, allerdings würde> ich gerne die Reihenfolge umkehren und das> scheint über glob nicht zu funktionieren oder?
Reihenfolge umkehren geht mit "array_reverse".
Wenn dir das reicht, bleibt's beim Dreizeiler:
1
foreach (array_reverse(glob("database/*.php")) as $filename) {