Sven Rautenberg: der rechte Weg zu preg_replace.

Beitrag lesen

Moin!

$ausgabe = preg_replace("/###metas###\n/", $erstellen['metas'], $erstellen['haupt']);
$ausgabe = preg_replace("/###titel###\n/", $erstellen['titel'], $ausgabe);
$ausgabe = preg_replace("/###menu###\n/", $erstellen['menu'], $ausgabe);
$ausgabe = preg_replace("/###allelinks###\n/", $erstellen['allelinks'], $ausgabe);
$ausgabe = preg_replace("/###labels###\n/", $erstellen['labels'], $ausgabe);

Alle diese Operationen erfordern kein preg_replace, sondern nur ein str_replace - das geht dann auch noch mal wesentlich schneller von der Ausführungszeit her.

Das sollte aber doch auch einfacher und vor allem flexibler gehen?

Sicher. Man kann beispielsweise eine Schleife machen. Nur wirst du in keinem Fall drum herumkommen, für jedes Vorkommen des Strings eine Ersetzungsfunktion aufzurufen.

Mein bisheriger, nicht funktionierender, Lösungsansatz ist dieser:

$ausgabe = preg_replace("/###(.*)###\n/", $erstellen['\1'], $erstellen['haupt']);

Öhm, irgendwie klingt mir das auch ziemlich arg unmöglich. Die Referenz auf \1 ist Bestandteil des regulären Ausdrucks - sie als Arrayindex zu verwenden, wird vermutlich niemals gehen können.

Ob nun $erstellen['\1'] oder $erstellen[\1], PHP gibt mir immer diesen Fehler aus: Notice: "Undefined index: \1 in D:\home\www\web5\html\index.php on line 26"

Du hast zwei Möglichkeiten: Entweder durchsuchst du deinen String nach Vorkommen von ###STRINGTEXT###, wertest aus, was STRINGTEXT ist, und ersetzt die gesamte Zeichenmenge durch den Inhalt von $erstellen['STRINGTEXT'], oder du wertest aus, welche Keys in $erstellen enthalten sind, und führst eine Ersetzen-Operation auf ###KEYWERT### aus.

$ausgabe = "Testweise ###test### ersetzen, gerne auch zweimal: ###test###";
$erstellen['test']="diese Ausgabe";

foreach ($erstellen as $key=>$value)
{
  $ausgabe = str_replace("###".$key."###",$value, $ausgabe);
}

echo $ausgabe;

- Sven Rautenberg

--
Die SelfHTML-Developer sagen Dankeschön für aktuell 20885,68 Euro Spendengelder!