Mittels glob nur Dateien mit bestimmten Zeichenfolgen ausgeben

Promaetheus

Mitglied
Ich versuche mit glob nur Dateien die eine gewisse Zeichenfolge enthalten aus einem Ordner auszugeben:

Verzeichnis:
Id_1_1
Id_1_2
Id_1_3
Id_2_1
Id_2_2
Id_3_1
Id_4_1
Id_4_2

Nun sollten beispielsweise alle Bilder mit dem Präfix Id_3 (wenn möglich case INsensitive) ausgegeben werden. Das habe ich wiefolgt versucht:
PHP:
$pfad = 'images/';
$suche = 'Id_'.$currentId.'_';

$dateinamen = array();

foreach(glob("$pfad{$suche}", GLOB_BRACE) as $bildname) {
  $dateiamen[] = $bildname;
}

echo '<pre>';
print_r($dateinamen);
echo '</pre>';

Ich bekomme so aber kein Ergebnis obwohl ein Bild Id_2_3 gespeichert ist. Ich habe in diesem Fall auch die Gross- und Kleinschreibung beachtet. Kann man diese mit glob() überhaupt "nicht" berücksichtigen, sprich ignorieren?
Wo habe ich denn in meinem Skript den Fehler? Mit $suche* funktioniert es auch nicht, da kommt eine Fehlermeldung dass er "}" erwartet.

ich wäre für Hilfe sehr dankbar.
 
Du mischt da ganz hässlich durcheinander. Um Strings und Variablen zu verketten nutzt man den Punkt-Operator ".", nicht die CurlySyntax. Und erst recht schreibt man keine Strings ohne Anführungszeichen wie $suche* (das Bedeutet dann $suche multipliziert mit).
PHP:
$pfad = 'images/';
$suche = 'Id_'.$currentId.'_*';

$dateinamen = array();

foreach(glob($pfad.$suche, GLOB_BRACE) as $bildname) {
  $dateiamen[] = $bildname;
}

echo '<pre>';
print_r($dateinamen);
echo '</pre>';
 
Seine CurlySyntax ist aber nicht falsch. So einfach ungewohnt.
PHP:
//Alles dasselbe
"$pfad{$suche}"
"{$pfad}{$suche}"
"$pfad$suche"
$pfad . $suche

Nachtrag:
Das würde ich mir Regulären Ausdrücken lösen. Hier mien Testscript
PHP:
//Simulation von:
//$filenames = scandir($pfad);
$filenames = array('id_1_1.gif', 'ID_1_2_hans.jpeg', 'id_2_3_a.png', 'id_a_b.gif');
//Testdaten $currentId
$currentId = 1;

//Pattern zusammensetzen
$filenamePattern = "/^id_{$currentId}_/i";
//und auf die Dateinamen anwenden
$filenames = preg_grep($filenamePattern, $filenames);
print_r($filenames);
ergibt
Code:
Array
(
    [0] => id_1_1.gif
    [1] => ID_1_2_hans.jpeg
)
 
Zurück