PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ereg_replace: Rückwärtsreferenzen als Parameter


groe
11.07.2006, 20:29:53
Hi,

Habe gesucht aber leider kaum eine passende Lösung gefunden. Hoffe ihr könnt mir helfen.

Mein Ziel:
In der Variable $str1 ist "Blablabla [29] blablabla" gespeichert, wobei die 29 in den eckigen Klammern auch ein anderer Wert sein kann. Nun soll automatisch "[29]" durch eine Information aus der MySQL-Datenbank ersetzt werden. Diese Information hat in MySQL die ID 29.

Mein Lösungsansatz:

$str1 = ereg_replace("\[([0-9]+)\]", mysql_result(mysql_query("SELECT info FROM infos WHERE id = '\\1'"),0, "info"), $str1);

Mein Problem:
\\1, die Rückwärtsreferenz, wird im folgenden Sourcecode zwar durch die Zahl ersetzt,
$str1 = ereg_replace("\[([0-9]+)\]", "\\1", $str1); // FUNKTIONIERT
wenn ich allerdings die Rückwärtsreferenz als Parameter an eine Funktion übergeben will, wird diese nicht durch den Zahlenwert zwischen den eckigen Klammern ersetzt.
$str1 = ereg_replace("\[([0-9]+)\]", strlen("\\1"), $str1); // FUNKTIONIERT NICHT


Ich hoffe ich habe mich verständlich ausgdrückt und irgendwer kann mir helfen. Bin am verzweifeln -__-

LG groe

Serp
11.07.2006, 21:08:55
Es gibt dafür eine sehr nette Funktion namens preg_replace_callback. Die macht genau das, was du brauchst: Sucht mittels einem regulären Ausdruck, übergibt die Ergebnisse an eine Funktion (allerdings blöderweise ein Array aus Ergebnissen , du musst dir da also eine Funktion bauen, die ein Array annimmt und die gewünschten Werte extrahiert) und ersetzt das durch den Rückgabewert. Wenns noch etwas komplizierter sein darf, kann man die Funktion auch gleich direkt mit create_function erzeugen. Dein beispiel sieht dann so aus:


$str1 = preg_replace_callback('/\[([0-9]+)\]/', create_function('$treffer', 'return strlen($treffer[1]);'), $str1);

Da du ne komplette sql-Abfrage realisieren willst, würd ich dir aber schwerstens empfehlen, die Funktion wirklich zu schreiben und auf create_function zu verzichten. Denn den Code verstehst du später nie mehr...

groe
12.07.2006, 03:00:24
Danke!

Hast mir wieder mal sehr weitergeholfen, Serp! :)