Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PHP: komisches Verhalten von Array (https://www.delphipraxis.net/48511-php-komisches-verhalten-von-array.html)

alcaeus 26. Jun 2005 16:26


PHP: komisches Verhalten von Array
 
Hallo ihr,

ich bin wieder mal knapp davor, PHP fuer heute in die Tonne zu schmeissen. Ich hab mir mein phpBB ein bisschen aufgebohrt, und will eine aus der DB ausgelesene Template-Variable ins Template reinschreiben. Da die Template-Engine aber mit solchen Faellen nicht umgehn kann, muss ich mir meine Template-Variable selbst raussuchen und den Wert manuell reinschreiben. Dies geht eigentlich so:
Code:
$caption = preg_replace("#\{([a-z0-9\-_]*?)\}#is", $template->_tpldata['.'][0]['\\1'], $caption);
in $caption steht in diesem Fall {L_PORTAL} drin, aber es wird auch nichts ausgegeben. Also habe ich folgendes probiert:
Code:
$caption = preg_replace("#\{([a-z0-9\-_]*?)\}#is", '\\1: '. $template->_tpldata['.'][0]['\\1'] ." : ". $template->_tpldata['.'][0]['L_PORTAL'], $caption);
Ausgegeben wird dann folgendes, und das macht mich stutzig:
Code:
L_PORTAL: : Portal
Das heisst, wenn ich den String im Array direkt angebe, funktionierts, und auch die RegExp stimmt (erkennbar an der Ausgabe von \\1), aber wenn ich das gefundene Ergebnis der RegExp verwende, erhalte ich einen leeren String.
Also entweder ich sehe den Fehler nicht oder php hat da einen Fehler, schliesslich funktioniert die Zeile in der Template-Engine selbst ja auch :gruebel:
Kann mir jemand weiterhelfen? :stupid:

Greetz
alcaeus

Waldteufel 26. Jun 2005 17:37

Re: PHP: komisches Verhalten von Array
 
Hi.

Die Funktion preg_replace in Delphi sähe in Pseudocode etwa so aus:
Code:
function preg_replace(pattern, replacement, subject: string; limit: integer = MAXINT): string;
begin
  while (pattern in subject) do
    ersetze pattern durch (ersetze '\\x' in replacement durch (inhalt von Klammer x in pattern))
end
Dabei ist zu beachten, dass Replacement KEIN Var-Parameter ist!

Code:
$caption = preg_replace("#\{([a-z0-9\-_]*?)\}#is", $template->_tpldata['.'][0]['\\1'], $caption)
ersetzt \{([a-z0-9\-_]*?)\} durch $template->_tpldata['.'][0]['\\1'] die \\1 heißt in diesem Falle wirklich \\1 und nicht (hier gefundenen Text einsetzen). ;-)

So geht's (hoffentlich) besser: (ungetestet)
Code:
$caption = preg_replace("#\{([a-z0-9\-_]*?)\}#is", "{$template->_tpldata['.'][0]['\\1']}", $caption)
(uff...)

alcaeus 26. Jun 2005 17:54

Re: PHP: komisches Verhalten von Array
 
Moin Waldteufel,

du hast Recht. Wenn ich eine Template-Variable namens "\\1" deklariere, dann wird der Text rausgeschrieben. Wie kann ich nun aber statt dem gefundenen Text den Wert aus dem Array reinschreiben, immer unter Verwendung des ersten Params?

Greetz
alcaeus

Christian S. 26. Jun 2005 17:58

Re: PHP: komisches Verhalten von Array
 
Hallo!

So geht es. Beachte das "e" am Ende des RegExp.

Code:
$myArray['L_PORTAL'] = 'Portal';
$caption = "{L_PORTAL}";

$caption = preg_replace("#\{([a-z0-9\-_]*?)\}#ise", '$myArray["\\1"]', $caption);

echo $caption;
Grüße
Christian

alcaeus 26. Jun 2005 18:00

Re: PHP: komisches Verhalten von Array
 
:firejump:
Was der einzige kleine Buchstabe ausmachen kann. Ich dachte schon dass das Ding als php-Code ausgefuehrt werden muss, aber nachdem ich kein Spezialist von RegExps bin....naja, der Rest erklaert sich von alleine *g* ;)

So funktionierts natuerlich, vielen Dank euch beiden :)

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz