PHP Such mit genauer Zeichenkette

djjlx

---???---
ID: 62937
L
9 Mai 2006
599
21
Hallo!

Ich hab hoffentlich ein kleines Problem das mich schon seit Tagen beschäftigt.

Ich habe zwei Arrys die ich mit
PHP:
array_diff_assoc($alt, $neu);
vergleiche.

Danach wandel ich die Ausgabe mit
PHP:
 $out = '';
         foreach ($result as $key=>$val) {
       
        $out .= ($out!=='' ? ", $key=$val" : "$key=$val");
        }
in einen String um.

Der string schaunt nun exakt so aus
PHP:
vname=Max,name=Muster

Nun möchte den String "verschönern":

PHP:
 $output = '';
 $anz = substr_count(',',$out);
 $log = explode(',',$out);
 for($a=0; $a<=$anz; $a++)
 {
     $fine = explode("=",$log[$a]);
     //$fine[0];Schlüsselwort
     //$fine[1];Wert alt

     if(preg_match('/^\Svname$/',$fine[0])!==false){$output .= preg_replace('/^\Svname$/','Vorname geändert',$fine[0]).' von <i>'.$fine[1].'</i> nach <i>'.$_POST['vname'].'</i>|';}
     if(preg_match('/^\Sname$/',$fine[0])!==false){$output.= preg_replace('/^\Sname$/','Nachname geändert',$fine[0]).' von <i>'.$fine[1].'</i> nach <i>'.$_POST['name'].'</i>|';}
 }

Nur leider wird "name" auch in "vname" gefunden. Und da ist mein Problem
Wie kann ich die Suche so eingrenzen das nur der Suchbegriff gefunden wird.

Das kommt derzeit dabei raus
PHP:
Vorname geändert von Max nach Maxtest|Nachname geändert von Max nach Muster test|
Das heißt er greift bei der such im 2 Druchlauf wieder auf vname zu statt nur auf name.

Leider weiß ich nicht weiter, hat jemand einen Tipp?
Gruss
djjlx
 
Mein Verdacht wäre, dass im ersten Durchlauf beide Bedingungen greifen und im 2. keine davon...
 
Spricht was dagen, die Ersetzungen schon im 1. Schritt zu machen, wo Du direkt $key vergleichen könntest?

Bzw. prüf doch mittels == statt preg_replace(), dann umgehst Du das Problem, dass "name" in "vname" enhalten ist.
 
Eine weit verbreitete Unart, alle String-Suchen und -Ersetzungen unbedingt mit RegExp machen zu wollen. Reguläre Ausdrücke sind was total praktisches, wenn man sie braucht, man kann sich das Leben aber auch deutlich zu schwer machen, wenn man sie unbedingt benutzen will.
Was tust du denn? Du zerlegst deinen String so, dass in der Schleife z.B. $fine[0]='vname' und $fine[1]='Max' auftaucht. Und jetzt willst du per regulärem Ausdruck in $fine[0] das Wort "vname" durch "Vorname geändert" ersetzen? Warum zum Geier?
PHP:
if($fine[0]=='vname') { $output .= 'Vorname geändert von '.$fine[1].' in '.$_POST['vname']; }
if($fine[0]=='name') { $output .= 'Nachname geändert von '.$fine[1].' in '.$_POST['name']; }
Wofür brauchst du hier ein preg_match oder ein preg_replace?
(Wenn du es denn unbedingt mit regulären Ausdrücken machen wolltest, solltest du dir \b mal anschauen (=Wortwechsel), damit wäre es kein Problem nach 'name' zu suchen, und dabei 'vname' nicht zu finden, aber - wie gesagt - reguläre Ausdrücke sind bei einer solchen Aufgabenstellung deutlich zu viel des Guten...)