problem mit preg_replace

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Atkaz, 16. Mai 2012 .

Schlagworte:
  1. 16. Mai 2012
    Zuletzt bearbeitet: 16. Mai 2012
    Hallo Leute,

    ich bin gerade dabei etwas zu verweifeln.
    Ich bin im Moment dabei ein Menu Management Modul zu schreiben. Dabei soll dem Benutzer ermöglicht werden, im Adminbereich eine struktur vorzugeben.

    Beispeil:
    HTML:
     [HEAD]
     <h4>menu.title</h4>
     <span>menu.image</span>
     [/HAED]
     [BODY]
     <div><span>item.url</span></div> 
     [CHILDREN]
     <div>
     item.title
     </div>
     [FOREACH]
     <li><span>item.url</span></li>
     [FOREACH]
     [/CHILDREN]
     [/BODY]
     [FOOTER]
     <div class="footer"></div>
     [FOOTER]
    
    soo..soweit ganz gut. Funktioniert alles wunder bar. Der string wird mittels preg_match_all gefiltert und nach Segmenten getrennt. Danach werden dieser gefiltert und es wird geguckt, ob Params(item.xxxx) vorhanen sind. Hier kommt der Knackpunkt. Wie bekomme ich es nun am besten hin, dass dieser nach einer Überüprüfung

    PHP:
    preg_replace ( "#menu.([a-zA-Z]+)#si" , "HierSOllDasMenuArrayHin" , $string )
    mit den werden aus dem Array ersetzt werden.

    Die Daten füe das Menu sind in der $this->menu gespeichert. Im Falle der Items ist es genau so $this->items.

    Es Muss ja theoretisch so ablaufen, dass die Items mit foreach durchlaufen werden, und für jedes Item die Struktur die z.B. in der [FOREACH]....[/FOREACH] enthalten ist, ersetzt wird also z.B. item.title in MenuElementTest etc.

    Ich kriege es i-wie mit preg replace nicht hin.

    Ich habe es auch schon mit preg_replace_callback versucht. Es sieht dann so aus.

    PHP:
       preg_replace_callback ( "#item.([a-zA-Z]+)#si" ,array( $this , "replace" ), $string )

       

       
    public function  replace ( $eingabe )
        {
          foreach(
    $this -> item  as  $item )
            if(
    is_array ( $eingabe ))
               foreach(
    $eingabe  as  $key )
                 return 
    $item [ $key ]
        }
    und da liegt auch i-wie das Problem.

    würd mich freuen, wenn jemand nen Vorschlag zu hätte wie man das ganze am besten umsetzen könnte.

    EDIT

    wenn ich es versuch so zu lösen:
    PHP:
      $array =array( "url" => "test" );
            return 
    preg_replace ( "#menu.([a-zA-Z]+)#si" , $array . "['$1']" , $string );

    bekomme ich die Fehlermeldung

    Code:
    Array to string conversion 
    
    mfg
    atkaz
     
  2. 16. Mai 2012
    AW: problem mit preg_replace


    Hm du kannst natürlich nicht das Array mit dem String gleichsetzen.
    Da du einen Key im Array nutzt probiere es doch mal so:
    PHP:
      $array =array( "url" => "test" );
            return 
    preg_replace ( "#menu.([a-zA-Z]+)#si" , $array [ 'url' ]. "['$1']" , $string );

     
  3. 16. Mai 2012
    Zuletzt bearbeitet: 16. Mai 2012
    AW: problem mit preg_replace

    Soo Ich habe es nun wie folgt gelöst

    PHP:
         $newString  "" ;
        foreach(
    $this -> owner -> menuDb -> items  as  $item )
        {
               
    // ersetzt den Child-Container durch die Kinderelemente
         
    $newString  preg_replace "#\[CHILDREN] (.*)\[/CHILDREN]#esi" , '$this->replaceChildren($item["id"])' $string );
           
    // Body-Struktur für jedes einzelne Item
             
    $arrayString []=  preg_replace "#item.([a-zA-Z]+)#esi" , 'isset($item["\1"]) ? $item["\1"] : "\1"' $newString );
                    
        }
          
       return 
    implode ( " " , $arrayString );


    das Entscheidende bei dieser Sache besteht in dem 'e' bei preg_replace
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.