Antwort an „Rolf B“ verfassen

Hallo Felix Riesterer,

die Frage lag mir auch auf den Fingern. Solange die Suche case-sensitive sein darf, ist glob() vermutlich brauchbar.

Auf meinem Windoof-PC hat mich glob allerdings geärgert, ich hatte in einem Ordner gearbeitet auf dessen Pfad ein Symlink lag und er hat sich strikt geweigert, irgendwas auszugeben. Aber scandir hat die gleiche Macke. Sehr doof.

Um case-insensitive zu suchen, ist scandir wohl notwendig. Aber zum Filtern nehme man doch bitte weder array_filter mit Callback-Akrobatik noch eine foreach-Schleife mit Array-Appendicitis.

Wie Gunnar sagte:

warum sollte man das tun, wenn es doch eine Funktion dafür gibt?

Die Funktion der Wahl heißt hier preg_grep. Die durchflöht ein Array automatisch mit einer Regex. Und ist auch keine Erfindung von PHP 8, die gibt's seit PHP 4.

$stadtbilder = preg_grep("/stadt.*\\.(jpg|png|gif)$/i", scandir($path));

Die Regex /stadt.*\.(jpg|png|gif)$/i sollte alle Dateien heraussuchen, die stadt enthalten (in jeder Schreibung) und auf .jpg, .png oder .gif enden. Bei Bedarf kann die Extensionliste auch verlängert werden…

Und ja, man könnte /^.*stadt.*\.(jpg|png|gif)$/i schreiben. Aber wozu vorne ankern, wenn man doch eh beliebig starten möchte.

Falls aber dieser Satz von Gunnar zutrifft:

Wenn die Dateinamen so sind wie im OP angegeben...

dann kann man /^stadt.*\.(jpg|png|gif)$/i als Regex verwenden.

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen