• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

str_replace mit array

jumbo125

Mitglied
Sehr geehrte User, ich hab ein (für mich) sehr merkwürdiges Problem. Ich möchte den Dateityp einer Datei mit einen anderen Wort ersetzen. Nun habe ich eine Array anglegt, welches alle "Suchwörter" enthält. Das komische, es erscheint keine Fehlermeldung, aber das Wort wird nicht ersetzt. Daher habe ich mir die Werte ausgeben lassen UND, tatsächlich, die Variable entählt den reichtigen Wert, aber das "ersetzten" wird nicht durchgeführt.
Code:
$type = array("jpg"=>"png","JPG"=>"png","jpeg"=>"png", "JPEG"=>"png");  

foreach($type as $key => $value) {
$pngname=str_replace($key,$value,$foto);

echo "<br> unbennenen";

echo "<br> suche: ".$key;  // darin ist der richtige WErt auch enthalten
echo "<br> ersetzten: ". $value;
echo "<br>pngname: ".$pngname; 
}

ich habe dann auch noch den Test durchgeführtund eine Datei mit der Endung "PNG" erstellt.
PHP:
$pngname = str_replac("JPG", "png", $foto); // es funktioniert.....

weiß jmand warum die Array-Schleife nicht geht???

P.s. ja, ich bin mir im klaren, dass ich einen Dateityp ändere und FALLS ich diese Datei wieder verwendnen möchte, kommt es ziemlich sicher zu Problem. Aber ich brauche nur den Namen.
 
Zuletzt bearbeitet:
Ja, das sollte irgendwie funktionieren, dein Code ist so aber nicht ganz vollständig, insofern ist schwer zu sagen, woran es liegt.
Aber um dein Problem zu lösen, könntest du natürlich auch einfach so vorgehen:
PHP:
$pngname = str_replace (array(".jpg", ".JPG", ".jpeg", ".JPEG"), ".png", $foto);
 
es tut mir leid, dass der Text nicht richtig dargestellt wurde. Hab es nun geändert.

Das ist bei weitem nicht der gesamte Quellcode, denn dieser wäre vile zu lange, und ist oftmals nicht übersichtlich.

Ich schreib ihn nochmal, mit Beipsieln, wie er in der tat aussieht:

Code:
$type = array("jpg"=>"png","JPG"=>"png","jpeg"=>"png", "JPEG"=>"png");   $foto = "image-001.JPG" //oder auch jpeg, jpg, 

foreach($type as $key => $value) { $pngname=str_replace($key,$value,$foto); 
//das hier sind nur mehr abrfragen, um zu sehen, ob der text geändert/ersetzt wurde echo "<br> unbennenen";  echo "<br> suche: ".$key;  // darin ist der richtige WErt auch enthalten echo "<br> ersetzten: ". $value; echo "<br>pngname: ".$pngname;  }
 
Ja, der Code verhält sich korrekt. In jedem foreach-Durchgang nimmst du den Originalstring von $foto und ersstzt den entsprechenden String. Im letzten Durchgang wird (in deinem Beispiel) nichts ersetzt, also bekommst du den Originalstring.
Zwei denkbare Abhilfen:
Die beste: in meinem Posting oben:
http://www.html.de/php/46564-str_replace-mit-array.html#post327641
Die zweitbeste:
PHP:
foreach($type as $key => $value) {
  $foto =  str_replace($key,$value,$foto); 
}
$pngname = $foto;
 
Zurück
Oben