Performance bzw. bessere Lösung?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Performance bzw. bessere Lösung?

    EDIT:
    Sorry, das Forum ändert meinen Code.
    Die Pattern heissen richtig "/({LANG:([\w]*)}/"; bzw. "/({DATA:([\w]*)}/"; und die Variable $replace hat den Inhalt "\\2";


    Hallo zusammen!
    Ich habe folgenden Code:
    PHP-Code:
    $input "{LANG::anrede},<br>{LANG::willkommen} {DATA::wo}";

    $a = array();

    $lang = array(
        
    'anrede' => 'Sehr geehrter Herr {DATA::name}',
        
    'willkommen' => 'Herzlich willkommen ',
    );

    $data = array(
        
    'name' => 'Mueller',
        
    'wo'   => 'im Forum',
    );

    $pattern1 "/({LANG::)([\w]*)}/";
    $pattern2 "/({DATA::)([\w]*)}/";

    echo 
    "Original:<br>$input";


    preg_match_all($pattern1$input$aPREG_SET_ORDER);

    for (
    $i=0$i count($a); $i++)
    {
        
    $input str_replace($a[$i][0],$lang[$a[$i][2]],$input);
    }

    echo 
    "<br><br>1. Durchgang:<br>$input";

    preg_match_all($pattern2$input$aPREG_SET_ORDER);

    for (
    $i=0$i count($a); $i++)
    {
        
    $input str_replace($a[$i][0],$data[$a[$i][2]],$input);
    }

    echo 
    "<br><br>2. Durchgang:<br>$input"
    Dieser Code liefert mir auch wie gewollt die Ausgabe:
    Code:
    Original:
    {LANG::anrede},
    {LANG::willkommen} {DATA::wo}
    
    1. Durchgang:
    Sehr geehrter Herr {DATA::name},
    Herzlich willkommen {DATA::wo}
    
    2. Durchgang:
    Sehr geehrter Herr Mueller,
    Herzlich willkommen im Forum
    Ich denke aber, dass diese Moeglichkeit
    1. nicht die performanteste
    2. nicht die eleganteste ist
    Richtig?

    Ich haette gerne eine Loesung mit preg_replace, die z.B. so aussehen koennte:
    PHP-Code:
    $replace '\\2';
    $test preg_replace($pattern1,$replace,$input);
    print 
    $test
    Hierbei laeuft ja auch fast alles richtig. Ich weiss nur nicht, wie ich es hinbekomme, dass der Replace dynamisch gesetzt wird - $lang[$replace] funktioniert hier leider nicht.
    Hoffe, es war einigermassen verstaendlich was mein Problem ist.

    Ausserdem frage ich mich, ob meine Pattern ($pattern1 und $pattern2) ausreichend sind, um in einem Text beliebige Muster der form {LANG::XYZ} und {DATA::asdfasdf} zu erkennen?

    Nochmal zusammengefasst:
    1. Gibt es elegantere bzw. performantere Loesungen?
    2. wie bekomme ich es hin in der unten genannten Loesung $replace zu "dynamisieren"?
    3. sind meine Pattern ausreichend?
    Zuletzt geändert von zzet; 12.09.2004, 18:13.

  • #2
    schiddebön: mit dem modifier /e geht alles!

    $temp = preg_replace('/{LANG:\w+)}/e', '$lang[$1]', $input);
    $output = preg_replace('/{DATA:\w+)}/e', '$data[$1]', $temp);
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      Schankedön!

      Das mit den Delimitern habe ich wohl noch nicht so ganz gerafft. Werde ich mir nochmal zu Gemüte führen, wenn ich mal Zeit habe.

      Kommentar

      Lädt...
      X