nitram70: Suchen + Ersetzen und Tag neu bauen

Hallo,
ich stehe vor der Aufgabe, einen regulären Ausdruck zu bauen, diese überfordert mich aber leider...

Zu bearbeiten ist ein Imagemap, welches vom Kunden mit einem bedienungsfreundlichem Online-Generator angelegt wurde. Daran ist auch nichts mehr zu rütteln, auch das Eingabeformat muss so bleiben.

Das ursprüngliche
<map id="imgmap2010224105256" name="imgmap2010224105256">
habe ich durch einen einfachen preg_replace umgebaut, das sieht nun so aus:
<map id="Map" name="Map">

Soweit kein Problem.

Das hier hole ich aus der Datenbank:

<p><map id="Map" name="Map">  
<area title="1" alt="5721" coords="477,8,499,35" shape="rect" />  
<area title="2" alt="5718,5719" coords="625,14,649,43" shape="rect" />  
...  
</map></p>

is klar, normales Imagemap.

Durch die etwas eingeschränkte Funktionsweise des Generators habe ich dem Kunden gesagt, er soll die Artikelnummer(n) in "alt" und den in den Titel eine laufende Nummer reinschreiben, die ich hinterher brauche.

Das angestrebte Ziel ist, den Wert aus "title" und "alt" weiter verwenden zu können, so soll aus:
<area title="1" alt="5721" coords="477,8,499,35" shape="rect" />
folgendes werden
<area href="articles.php?catid=bla&article[]=5721|1" title="1" alt="1" coords="477,8,499,35" shape="rect" />

und aus

<area title="2" alt="5718,5719" coords="625,14,649,43" shape="rect" />
folgendes werden
<area href="articles.php?catid=bla&article[]=5718|2&article[]=5719|2" title="2" alt="2" coords="625,14,649,43" shape="rect" />

Die Catid brauch ich, ist aber kein Problem reinzubekommen. Das Array article[] bringt per GET dann die Artikelnummern und die laufende Nummer mit. Alt soll wenn es geht gleich title werden.

Tja, und da stehe ich nun mit meinem Hemd und weiss so garnicht wie ich das angehen soll...

Wäre nett wenn mir jemand helfen könnte.

Viele Grüße,
Martin

  1. Lieber nitram70,

    Dein Problem lässt sich nicht mit einer einzigen RegExp lösen. Du brauchst zuerst ein Muster, über das Du mit preg_match_all Deine <area>-Elemente findest. Anschließend musst Du diese ja in einer Schleife schön abarbeiten, wobei Du die geklammerten Bestandteile Deines in preg_match_all benutzen Musters als Unterarrays der Reihe nach durchgehen kannst.

    so soll aus:
    <area title="1" alt="5721" coords="477,8,499,35" shape="rect" />
    folgendes werden
    <area href="articles.php?catid=bla&article[]=5721|1" title="1" alt="1" coords="477,8,499,35" shape="rect" />

    und aus

    <area title="2" alt="5718,5719" coords="625,14,649,43" shape="rect" />
    folgendes werden
    <area href="articles.php?catid=bla&article[]=5718|2&article[]=5719|2" title="2" alt="2" coords="625,14,649,43" shape="rect" />

    Schau Dir preg_match_all genauer an, prüfe, wie die Array-Struktur des in der Doku "$matches" genannten Arrays aussieht, wenn Du Bestandteile Deines Musters klammerst und melde Dich hier wieder, wenn Du hängen bleibst.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. Hallo,

    da es sich hierbei

    Das hier hole ich aus der Datenbank:

    <p><map id="Map" name="Map">

    <area title="1" alt="5721" coords="477,8,499,35" shape="rect" />
    <area title="2" alt="5718,5719" coords="625,14,649,43" shape="rect" />
    ...
    </map></p>

      
    ja eigentlich um XML handelt, würde ich [SimpleXML](http://de.php.net/manual/de/book.simplexml.php) oder etwas ähnliches, was PHP bietet, um XML-Bäume zu manipulieren.  
      
    Gruß,  
    Leeloo
    
    -- 
    "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra