Zurück   RR:Board > Webmaster > Webentwicklung

Web-Technik: ASP, PHP, XML, Javascript, AJAX, SQL Datenbanken. Webentwicklung: CMS, Foren, Blog -Scripte.
Antwort
 
Themen-Optionen Thema durchsuchen

problem mit preg_replace
Alt 16.05.2012, 14:50   # 1
Atkaz
File Camper
gruen gruen gruen gruen gruen 
Bewertung:
Atkaz hat 500 bis 999 PunkteAtkaz hat 500 bis 999 PunkteAtkaz hat 500 bis 999 PunkteAtkaz hat 500 bis 999 PunkteAtkaz hat 500 bis 999 Punkte
Registriert seit: Sep 2006
Beiträge: 237
Power: 18
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-Code:
[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-Code:
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-Code:
   preg_replace_callback("#item.([a-zA-Z]+)#si",array($this,"replace"),$string)

   
/*
   * replace
   */
   
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-Code:
  $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

Geändert von Atkaz (16.05.2012 um 14:57 Uhr).
  Atkaz ist offline   Mit Zitat antworten

Alt 16.05.2012, 15:42   # 2
phraser
Ehrenmitglied
vip
Bewertung:
phraser hat 2500 bis 5000 Punktephraser hat 2500 bis 5000 Punktephraser hat 2500 bis 5000 Punktephraser hat 2500 bis 5000 Punktephraser hat 2500 bis 5000 Punktephraser hat 2500 bis 5000 Punktephraser hat 2500 bis 5000 Punktephraser hat 2500 bis 5000 Punktephraser hat 2500 bis 5000 Punktephraser hat 2500 bis 5000 Punkte
Registriert seit: Dec 2004
Internet: >=100Mbit
Beiträge: 2.709
Power: 34
Zitat:
Zitat von Atkaz Beitrag anzeigen
EDIT

wenn ich es versuch so zu lösen:
PHP-Code:
  $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

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-Code:
  $array=array("url"=>"test");
        return 
preg_replace("#menu.([a-zA-Z]+)#si",$array['url']."['$1']",$string); 
  phraser ist offline   Mit Zitat antworten

AW: problem mit preg_replace
Alt 16.05.2012, 16:18   # 3
Atkaz
File Camper
gruen gruen gruen gruen gruen 
Bewertung:
Atkaz hat 500 bis 999 PunkteAtkaz hat 500 bis 999 PunkteAtkaz hat 500 bis 999 PunkteAtkaz hat 500 bis 999 PunkteAtkaz hat 500 bis 999 Punkte
Registriert seit: Sep 2006
Beiträge: 237
Power: 18
Themenstarter
Soo Ich habe es nun wie folgt gelöst

PHP-Code:
     $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

Geändert von Atkaz (16.05.2012 um 18:12 Uhr).
  Atkaz ist offline   Mit Zitat antworten
Antwort

RR:Board > Webmaster > Webentwicklung > problem mit preg_replace


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

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] - preg_replace wildcard erklärung Chieftrain Webentwicklung 6 02.12.2010 23:20
[PHP] - preg_replace mp007 Webentwicklung 3 31.01.2009 19:38
[PHP] - preg_replace problem encud Webentwicklung 9 15.12.2008 16:21
[Problem] Problem beim Joggen mit dem Bein !nV!$!bL3 Sport und Fitness 11 28.04.2007 15:17
Problem mit IRC (Software caused connection problem) blade65687 Netzwerk & Internet 2 16.03.2005 17:24



Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.
vBulletin Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.