Mathias Brodala: Inhalt von einem Arry bereinigen

Beitrag lesen

Hallo Volker.

ich habe ein Problem mit dem Bereinigen des Inhalts eines Arrays:
Ich lese mit folgenden Code jpg- und png-Dateien aus einem Verzeichnis aus und schreibe sie in ein array $dateien:

$dateien = array();
$temp2 = "ordner";
$temp3 = opendir($temp2);
while (false !== ($datei = readdir($temp3))) {
  if(is_file($temp2."/".$datei)) {
    $pfad = pathinfo($temp2."/".$datei);
    if ($pfad['extension'] == "jpg" || $pfad['extension'] == "png") {
      $dateien[] = $datei;
    }
  }
}
closedir($temp3);

Dir steht PHP5 nicht zur Verfügung? Wenn doch, dann könntest du einfach scandir verwenden. Fernab davon bietet sich auch glob zum Auslesen von Verzeichnissen an.

Die Einträge im Array sehen dann wie folgt aus:
[0] => thumbs_01.jpg , [1] => thumbs_02.png , [2] => thumbs_03.png , [3] => thumbs_04.jpg , ...

Wie stelle ich es an, dass der Teilstring "thumbs_" eines jeden Eintrags gelöscht wird?

Du könntest dir eine geeignete Callback-Funktion für array_map schreiben.

Meine Idee mit foreach und ereg_replace scheitert daran, dass foreach eine Kopie des Arrays erzeugt und damit arbeitet...

Nicht, wenn du explizit dein Array in der Schleife verwendest:

  
$dateien = array('thumbs_01.jpg', 'thumbs_02.png', 'thumbs_03.png', 'thumbs_04.jpg');  
$str_remove = 'thumbs_';  
  
foreach ($dateien as $index => $datei) {  
  
  # Wenn am Anfang des Dateinamens gefunden  
  if (strpos($dateien[$index], $str_remove) === 0) {  
  
    # Entfernen  
    $dateien[$index] = substr($dateien[$index], strlen($str_remove));  
  }  
}  
  
print_r($dateien);

Einen schönen Sonntag noch.

Gruß, Mathias

--
ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
debian/rules