Volker: Inhalt von einem Arry bereinigen

Hallo zusammen,
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);

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?
Meine Idee mit foreach und ereg_replace scheitert daran, dass foreach eine Kopie des Arrays erzeugt und damit arbeitet...
Kann mir jmd das Brett vor'm Kopf entfernen? ;-)

Danke im Voraus für Antworten.
Gruß, Volker

  1. 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
    1. Oha, ein Haufen Tipps, mein Problem gelöst und der Code verbessert.
      Danke :-).
      Gruß, Volker

    2. foreach ($dateien as $index => $datei) {

      Nur damit ich das auch richtig verstehe:
      Was genau bewirkt das "$index => $datei"? Die Variable $datei wird ja in der foreach-Schleife nicht mehr verwendet, dürfte somit doch eigentlich keine Bedeutung mehr haben!??

      Gruß, Volker

      1. Hallo Volker.

        foreach ($dateien as $index => $datei) {
        Nur damit ich das auch richtig verstehe:
        Was genau bewirkt das "$index => $datei"? Die Variable $datei wird ja in der foreach-Schleife nicht mehr verwendet, dürfte somit doch eigentlich keine Bedeutung mehr haben!??

        Dies sorgt dafür, dass du innerhalb der foreach-Schleife separaten Zugriff auf den Schlüssel und dessen Wert hast, wohingegen dir normalerweise nur der Wert zur Verfügung steht. Und da du eigentlich nur den Schlüssel brauchst, kommst du so an diesen.

        Und gerade merke ich auch, dass eine einfache for-Schleife wahrscheinlich besser geeignet wäre, da diese sowieso mit einem numerischen Index arbeitet. Naja, egal.

        Einen schönen Montag noch.

        Gruß, Mathias

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