Seite 1 von 1

Preg_replace

Verfasst: 03.04.2009 23:58
von TheHoschi
Mohoin kann mir jemand sagen warum das folgende nicht funktioniert?:

Code: Alles auswählen

function PatchArea($area){
     /////////////////////////////////////
    //     --- Unterfunktion ---       ///
   ///////////////////////////////////// /
   // Vereint Doppelte Punkte         // /
   ///////////////////////////////////// /
   // Parameter:                      // /
   // $area: Der zuvor erstellte      // /
   // string mit den area-einträgen  ///
   /////////////////////////////////////
   preg_match_all("/coords=\"(.*)\,4/",$area,$result);
   preg_match_all("/title=\"(.*)\" alt/",$area,$name);
   #print_r($name[1]);
   #print_r ($result[1])."<br>";
   $a = (count($result[1])-1);
   for($i = 0; $i < $a; $i++){
      if($result[1][$i] == $result[1][$a]){
         print $name[1][$i];
         print $name[1][$a];
         preg_replace("/".$name[1][$i]."/",$name[1][$i].", ".$name[1][$a],$area);
         preg_replace("/".$name[1][$a]."/","",$area);
      }

   }

   return $area;
Der Sinn der Funktion ist es, aus dem String $area:

Code: Alles auswählen

	<area title="Malte" alt="Text" coords="371.350313091,473.431341396,4" shape="circle">
	<area title="Seppel" alt="Text" coords="416.094992396,395.196570387,4" shape="circle">
	<area title="Jan" alt="Text" coords="525.34174187,302.383891736,4" shape="circle">
	<area title="Nika" alt="Text" coords="365.829865644,269.340634416,4" shape="circle">
	<area title="Mario" alt="Text" coords="525.34174187,302.383891736,4" shape="circle">
doppelte Besetzungen der Koordinaten herauszusuchen und zusammenzufügen. In diesem Fall sollte statt "Jan", "Jan, Mario" stehen und die Mario-Zeile gelöscht werden.
klappt aber nicht^^

Zusatzinfos:
Das Auslesen der Namen und Koordinaten mit preg_match_all klappt wunderbar, der Haken scheint bei preg_replace zu liegen
Danke im Voraus
mfG Hoschi

Re: Preg_replace

Verfasst: 04.04.2009 17:18
von gn#36
Also ich wäre mir nicht so sicher dass das so wirklich funktioniert, du vergleichst ja alles nur mit dem allerletzten Eintrag. Warum die Ersetzung nicht funktioniert liegt schlicht und einfach an der Reihenfolge in der du die beiden Ersetzungen vornimmst. Du fügst erst den Namen Mario ein, löscht dann im nächsten Schritt aber sämtliche Marios aus der Liste (inklusive dem den du gerade eingefügt hast). Dreh die Reihenfolge um und schon gehts. Um alles mit allem zu vergleichen brauchst du aber zwei Schleifen mit denen du durch die Daten läufst, also etwa so:

Code: Alles auswählen

for($i = 0; $i <= $a; $i++)
{
    for($j = 0; $j <= $a; $j++)
    {
        if($i != $j)
        {
            //Jetzt den Vergleich durchführen (Vergleich mit sich selbst ist sinnlos, daher das if)
        }
    }
} 

Re: Preg_replace

Verfasst: 04.04.2009 18:49
von TheHoschi
Danke schonmal für die Antwort. Das scheint echt ein Fehler gewesen zu sein. Aber leider verändert sich am Quelltext genau NIX. Das preg-replace muss irgendwie falsch sein

Code: Alles auswählen

                print $name[1][$i];
                print $name[1][$a];
das ist ja nur ein Testdruck, der funktioniert auch und gibt einmal JanMario aus
warum geht das nich -.-

Re: Preg_replace

Verfasst: 05.04.2009 01:37
von gn#36
Hast du denn auch das gemacht?
gn#36 hat geschrieben:... Dreh die Reihenfolge um und schon gehts....
Die preg_replace sind in der falschen Reihenfolge, außerdem: Du bekommst doch exakte Werte genannt, warum nimmst du nicht einfach str_replace? Das ist in dem Fall weniger Fehleranfällig, da die Inhalte der Variablen ja auch theoretisch Dinge wie Punkte, Klammern o.ä. enthalten könnten die das ganze dann zum Scheitern bringen.

Re: Preg_replace

Verfasst: 05.04.2009 10:59
von TheHoschi
Hm habs jetzt mal so gemacht aber klappt auch nicht.

Code: Alles auswählen

   $a = (count($result[1])-1);
   for($i = 0; $i < $a; $i++){
      if($result[1][$i] == $result[1][$a]){
         str_replace("/".$name[1][$a]."/","",$area);
         str_replace("/".$name[1][$i]."/",$name[1][$i].", ".$name[1][$a],$area);
      }

   }
kann es sein, das die Zeilenumbrüche probleme machen?

Re: Preg_replace

Verfasst: 05.04.2009 19:35
von gn#36
[php:str_replace] ist nicht gleich [php:preg_replace].
Die Parameterreihenfolge ist anders und außerdem kannst du str_replace keine Regulären Ausdrücke geben, also lass die Slashes weg.

Außerdem ganz wichtig: Die Funktion verändert nicht den vorhandenen String, sondern gibt die veränderte Variante zurück! D.h. du musst danach mit dem Rückgabewert weiterarbeiten, der wird von dir aber völlig ignoriert, das ist so als würdest du die Funktion überhaupt nicht aufrufen.

Re: Preg_replace

Verfasst: 09.04.2009 20:44
von TheHoschi
Danke dir, klappt xD wunderbare Sache =) super danke