Wörter effizienter ersetzen

Jennesta

Erfahrenes Mitglied
Hey,
ich lese gerade Textdateien mittels php ein und ich muss gewisse wörter ersetzen, oder besser gesagt nur vor ihnen und nach ihnen etwas einfügen.

Bisher sieht es so aus :

PHP:
$replace = array("straße", "bahn", "opa", "hallo");
$place = array("12straße12", "12bahn12", "12opa12", "12hallo12");
$text = [...];
$new = str_replace($replace, $place, $text);

Wie man leicht erkennt weisen die Zeichen, die ich vor und nach den wörtern einfügen will alle Ähnlichkeit zueinander auf. Das Ganze wird zwar noch komplizierter, aber ich denke das reicht als Beispiel. Jedenfalls ist mir das bei so einigen hundert Wörtern, die ich ersetzen will, ein bisschen lästig und ich finde auch extrem Speicherlastig.
Also meine Frage ist nun: gibts eine Möglichkeit das ganze viel effizienter zu machen, wie "Wenn das Wort im String enthalten, dann füge vor und nach dem Wort folgendes ein."
Ihr würdet mir und besonders meinem Quelltext sehr helfen. Möglicherweise auch der Laufzeit.

Gruß Jennesta
 
Hi,

wenn es nach der Geschwindigkeit geht, dürfte str_replace() das wohl am schnellsten erledigen.
Mit Regulären Ausdrücken und den entsprechenden Funktionen (preg_replace() bzw. ereg_replace()) geht das dann um einiges langsamer. (Quelle 1 und Quelle 2)
Meine Frage wäre dann, wie genau stellst du dir das vor das ganze "effizienter" zu gestalten? Oder: Wie würde ein "kompliziertes" Beispiel denn aussehen? Vielleicht gibt es ja auch eine ganz andere Lösung, das allerdings kann man nur sagen wenn man weis was genau das werden soll.
 
Ja effizienter galt hauptsächlich für mich, weil wenn ich jedesmal so ca 20-40Zeichen vor und nach sonem Wort schreiben muss und das bei mehreren hundert Wörtern ist ja recht viel des ganzen Quelltextes redundant.
Das ganze hat quasi so ein bisschen Stil von einem Syntax_highlighter. Nun weiß ich selbst, wie auch anderen gesagt wurde, "Warum das Rad neuerfinden?", aber hätte ja klappen können, dass ich mir das leben etwas erleichtere.
Komplizierter in der Hinsicht, dass nicht nur statische Zeichen vor und anchher hinzugefügt werden, sondern Variablen, die CSS enthalten, jenachdem wie ich das selbst festlege außerhalb.
 
Wenn das so ist dann versuchen wir mal was:
PHP:
$text = "Ich könnte mich nicht erinnern.";

$a = array(
  'W',
  'Ö',
  'R',
  'T',
  'E',
  'R'
);

foreach($a as $s)
{
  $text = str_replace($s, '24' . $s . '24', $text);
}

Sind wir noch bei O(n*m) ?
Oder O(n² * m) ?

Edit: Ich denke O(n² * m). str_replace läuft n Zeichen durch und ersetzt t Fundstellen. t <= n demnach ist str_replace O(n²). foreach läuft m Elemente durch und liefert Theta(m). Macht insgesamt O(n² * m). Sag mir bitte jemand, dass das stimmt ^^
 
Zuletzt bearbeitet:
Diese Lösung kommt glaube ich genau nach dem was ich mir vorgestellt habe, wusste ja nicht, dass ich die Variablen dort so einfach mit dem Punkt aneinanderketten kann. So gehe ich das ganze zwar mehrmals durch, aber irgendwo muss man ja Abstriche machen :D, zumal ich so aber auch noch mehr Einfluss auf das zu Ersetzende nehmen kann.

Hmm ich weiß nicht genau wie str_replace arbeitet aber ich glaube da ist n² schon richtig. Also so extrem genau nehme ich es mit der Laufzeit auch nicht, aber man möchte es ja schon gerne gut und erweiterbar haben ;)
 
Zurück