Manches ist einfacher, als manche denken. Hier stand ein Programmierer vor der Aufgabe, in einem Array (Hash) Werte zu finden. Den zweiten Schritt - das Ersetzen - habe ich für weitere Ratsuchende gleich mitgeliefert:
// Testdaten, wirklich wild: $user = array(); $user[0]['vname'] = 'Hans'; $user[0]['nname'] = 'Dampf'; $user[2]['vname']['bar']['solltreffer_1'] = 'SUCHMICH'; $user[2]['vname']['foo']['solltreffer_2'] = 'SUCHMICH'; $user[2]['vname']['long'] = 'verene'; $user['003']['vname'] = 'Stein'; $user['003']['nname'] = 'Hein'; $user['007'] = 'SUCHMICH'; $user[7] = 'SUCHMICH'; // Aufruf (Test) der Funktionen print 'Aufruf mit IsInArray($search, $haystack):'."\n"; $ar=IsInArray('SUCHMICH', $user); // Funktionsaufruf if ($ar) { print "gefunden\n"; } else { print "NICHT gefunden\n"; } print '$ar: '; print_r($ar); print "\n----------------------------------------------------------------------\n"; print 'Aufruf mit ReplaceFirstInArray($search, $replace, $haystack):'."\n"; print_r (ReplaceFirstInArray('SUCHMICH', '!!!ERSTER FUND "SUCHMICH" ERSETZT!!!', $user)); print "\n----------------------------------------------------------------------\n"; print 'Aufruf mit ReplaceALLInArray($search, $replace, $haystack):'."\n"; print_r (ReplaceAllInArray('SUCHMICH', '!!!ALLE FUNDE "SUCHMICH" ERSETZT!!!', $user)); print "\n----------------------------------------------------------------------\n"; // Die Funktionen: function IsInArray( $search, $haystack, $ar=array()) { $c=count($ar); foreach ( array_keys($haystack) as $k ) { $ar[$c] = $k; if ($haystack[$k] == $search) { return $ar; } elseif ( is_array($haystack[$k]) ) { // wenn array, dann: $ret = IsInArray($search, $haystack[$k], $ar); // rekursiver Funktionsaufruf if (false !== $ret) { return $ret; } } } return false; } function ReplaceFirstInArray($search, $replace, $haystack) { $ar=IsInArray($search, $haystack); if (false === $ar) { print "Kein Fund!\n" ; return $haystack; } else { $var = &$haystack; foreach($ar as $k) { $var = &$var[$k]; // Hier den "Fundbaum" in $ar "hochklettern" und Referenzen bilden } $var = $replace; // Tatsächlich wird an der referenzierten Stelle ersetzt! } return $haystack; } function ReplaceAllInArray($search, $replace, $haystack) { $ar = IsInArray($search, $haystack); while ($ar) { // Solange der String gefunden wurde(!) $haystack = ReplaceFirstInArray($search, $replace, $haystack); //Ersetzen des ersten Fundes $ar = IsInArray($search, $haystack); //Nachschauen, ob es weitere Funde gibt. } return $haystack; }