Regulärer Ausdruck und $1 als Arrayelement

Also ich mach gerade mein Gästebuch mit ner Klasse und Templates.
Meine Platzhalter sehen so aus: !mysqlcolumn! und werden dann durch die entsprechenden Teile von mysql_fetch_array ersetzt,
also so:
PHP:
$eintragtpl[$eintragindex] = str_replace("!eintragid!", $geteintraege['eintragid'], $eintragtpl[$eintragindex]);
jetzt hätte ich es natürlich lieber mit RegEx, die passende preg_replace dafür müsste ja nun so aussehen:
PHP:
preg_replace("/!([A-Za-z0-9]+)!/i", $geteintraege[$1], $eintragtpl[$eintragindex]);

aber das Problem ist das $geteintraege[$1] funktioniert nicht :( habs auch mit ' versucht und auch schon mit eval()
aber ich bekomm es einfach nicht hin php zu verklickern das es ein Arrayelement is. :(

Achso hab es auch mit \\1 versucht.
 
Zuletzt bearbeitet:
Also wenn es wirklich das Array-Element $1 ist (der Name ist $1) dann musst du \$1 schreiben (das \ escapet das nächste Zeichen) und wenn das eine Variable ist dann geht das natürlich nicht, da keine Variabeln mit Zahlen oder Sonderzeichen beginnen dürfen...
 
Ne man muss es nicht escapen, da bei foreach ja auch $array[$key] geht.

Und $1 ist eine reservierte Variable die funktioniert also! (\\1 geht ja auch nicht, ist die alte Schreibweise für $1),
ich kanns ja auch durch $1 ersetzen lassen, nur eben nicht durch $array[$1]...

Naja dann werd ichs wohl mal mit ner Funktion versuchen mussen, aber auf so nen Stringgestückel hab ich eigentlich keine Lust weil ich denke dasses auch mit RegEx geht... :/
 
Zuletzt bearbeitet:
PHP:
<?php
preg_replace("/!([A-Za-z0-9]+)!/i", "$geteintraege[////1]", $eintragtpl[$eintragindex])
?>

Sollte (eigentlich) funktionieren. Sonst mit dem e-modifier und einer Funktion, die den passenden Wert zurückliefert.
 
Hmm, so?
Code:
preg_replace("/!([A-Za-z0-9]+)!/ei", "\$aVar['$1']", $sData);

Wenn das nicht geht, dann vielleicht so:
Code:
preg_replace("/!([A-Za-z0-9]+)!/ei", "\$GLOBALS['aVar']['$1']", $sData);
 
Die beiden Vorschläge von Fabian Hofmann funktionieren einwandfrei!
Jedenfalls beim Testscript.
PHP:
<?php 
$foo['bar'] = "Geschafft";
$string = "!bar! blablabla";

echo preg_replace("/!([A-Za-z0-9]+)!/i", "$foo[////1]", $string)."<p>";
echo preg_replace("/!([A-Za-z0-9]+)!/ei", "\$foo['$1']", $string)."<p>";
echo preg_replace("/!([A-Za-z0-9]+)!/ei", "\$GLOBALS['foo']['$1']", $string)."<p>";
?>
blablabla
Geschafft blablabla

Geschafft blablabla

Vielen vielen Dank euch! =)
 
Zurück