AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PHP: komisches Verhalten von Array

Ein Thema von alcaeus · begonnen am 26. Jun 2005 · letzter Beitrag vom 26. Jun 2005
Antwort Antwort
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

PHP: komisches Verhalten von Array

  Alt 26. Jun 2005, 17:26
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
Kann mir jemand weiterhelfen?

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#2

Re: PHP: komisches Verhalten von Array

  Alt 26. Jun 2005, 18:37
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...)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: PHP: komisches Verhalten von Array

  Alt 26. Jun 2005, 18:54
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#4

Re: PHP: komisches Verhalten von Array

  Alt 26. Jun 2005, 18:58
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
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: PHP: komisches Verhalten von Array

  Alt 26. Jun 2005, 19:00

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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 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