Rolf B: php ARRAY einlesen und bestimmte Begriffe behalten und andere ARRAY Teile löschen

Beitrag lesen

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