tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
181
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Hallo,

    ich bastle gerade an einer Template-Klasse. In dieser gibt es die Möglichkeit Sektionen, Variablen, Konstanten und Werte abhängig von ihrer Markierung im Template zu erstellen. Hauptsächlich geht es mir jetzt nur um das Problem mit den Sektionen und Werten. Werte können außerhalb von Sektionen existieren oder innerhalb von Sektionen. Dabei ist es nicht möglich Sektionen ineinander zu verschachteln. Ich habe schon eine Lösungsmöglichkeit parat mit der ich das Problem lösen könnte, aber diese frisst zu viele Ressourcen (FOREACH-Schleifen etc.). Jetzt habe ich mir überlegt, dass das doch auch direkt über RegEx in preg_match_ ... () umzusetzen möglich sein müsste.

    Ein Beispiel:
    Code :
    1
    
    {WERT1}{SECTION="sektion1"}{WERT2}{WERT3}{/SECTION}{WERT4}{SECTION="sektion2"}{WERT4}{/SECTION}{WERT5}
    Das ergibt folgenden Array:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    // Werte die nicht in Sektionen sind:
    Array
    (
        [WERT1] =>
        [WERT4] =>
        [WERT5] =>
    )
     
    // Werte in Sektionen:
    Array
    (
        [sektion1] => Array
            (
                [WERT2] =>
                [WERT3] =>
            )
     
        [sektion2] => Array
            (
                [WERT4] =>
            )
     
    )

    Für eine möglicherweise logischere Struktur wäre ich auch dankbar.
    Also, wenn mir jemand helfen könnte, dann wäre ich ihm sehr dankbar.
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  2. #2
    Registriert seit
    Feb 2002
    Ort
    Österreich | Vorarlberg
    Beiträge
    613
    Ich hoffe das hilft dir weiter.
    PHP-Code:
    <?php

    $str 
    '{WERT1}{SECTION="sektion1"}{WERT2}{WERT3}{/SECTION}{WERT4}{SECTION="sektion2"}{WERT5}{/SECTION}{WERT6}';
    preg_match_all('/([{}a-z0-9]*){SECTION="sektion[0-9]{1,3}"}([{}a-z0-9]*){\/SECTION}({[a-z0-9]+})/is'$str$matches);

    array_pop($matches[1]);
    $outer[] = array_merge($matches[1], $matches[3]);
    echo 
    '<hr><pre>';
    print_r($outer);
    echo 
    '</pre>';

    preg_match_all('/{[a-z0-9]*}/is'implode(''$matches[2]), $inner);
    echo 
    '<hr><pre>';
    print_r($inner);
    echo 
    '</pre>';

    ?>
    mit freundlichen Grüßen
    Samuel Weber
     

  3. #3
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.961
    Also die Sektionen müssen nicht den Wortstamm "sektion" enthalten die können auch "blub" oder "lol" oder was auch immer heißen, müssen sich nur an das Schema halten:
    ([A-Za-z_0-9 ])+

    Und die Werte müssen sich nur an das Schema halten:
    [A-Za-z]([A-Za-z0-9_])*

    Das Problem bei deiner Idee ist, dass ich nicht die Namen der Sektionen erhalte, welche ich ja als Schlüsselwerte brauche.
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    mein Vorschlag wäre, sich zuerst alle {...} rauszugreifen, diese dann der Reihe nach durchzugehen und dabei das gewünschte Array aufzubauen. Das hat den Vorteil, dass man hier ggf. Fehlerbehandlung einfacher durchführen kann (im Beispielquelltext in Form einer Warnung) und einer Erweiterung auf geschachtelte Sektionen später auch nichts mehr im Weg steht.

    Hier der Beispielquelltext:
    PHP-Code:
    <?php

    $str 
    '{WERT1}{SECTION="sektion1"}{WERT2}{WERT3}{/SECTION}{WERT4}{SECTION="sektion2"}{WERT4}{/SECTION}{WERT5}';

    preg_match_all('/{(?:\/SECTION|SECTION="([A-Za-z_0-9 ]+)"|([A-Za-z](?:[A-Za-z0-9_])*))}/is'$str$matches);

    $num_matches count($matches[0]);
    $current_section null;

    $values = array();

    for (
    $i 0$i $num_matches; ++$i) {
        
    $section_name $matches[1][$i];
        
    $value_name $matches[2][$i];
        if (
    $value_name) {
            
    $values[$current_section][$value_name] = "";
        } elseif (
    $section_name) {
            if (
    $current_section != null) {
                echo 
    "Warnung: geschachtelte Sektionen sind nicht erlaubt\n";
            }
            
    $current_section $section_name;
        } else {
            if (
    $current_section == null) {
                echo 
    "Warnung: {/SECTION} ohne vorheriges {SECTION=\"...\"}\n";
            }
            
    $current_section null;
        }
    }

    print_r($values);

    ?>
    Grüße, Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

Ähnliche Themen

  1. c# zweidimensionales array
    Von xlon im Forum .NET Windows Forms
    Antworten: 12
    Letzter Beitrag: 26.02.10, 08:21
  2. Zweidimensionales Array mit Raute erstellen.
    Von ConfusionZero im Forum Java Grundlagen
    Antworten: 9
    Letzter Beitrag: 28.11.09, 21:52
  3. [perl] Vorhandes Array [Name;Vorname/n] in zweidimensionales Array splitten
    Von FlockY im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 3
    Letzter Beitrag: 31.08.09, 18:53
  4. Zweidimensionales Array
    Von crazyPower im Forum PHP
    Antworten: 2
    Letzter Beitrag: 04.07.05, 16:03
  5. Antworten: 1
    Letzter Beitrag: 29.09.04, 16:47