2009-04-10 4 views
0

Ich habe die folgende Zeichenfolge Ersatz Problem, und ich bin in einer ganz fix hierMehrere String-Ersatz in der gleichen Zeichenfolge in php

PFB die Probe Zeichenfolge

$string = 'The quick sample_text_1 56 quick sample_text_2 78 fox jumped over the lazy dog.'; 

$patterns[0] = '/quick/'; 
$patterns[1] = '/quick/'; 
$patterns[2] = '/fox/'; 

$replacements[2] = 'bear'; 
$replacements[1] = 'black'; 
$replacements[0] = 'slow'; 

echo preg_replace($patterns, $replacements, $string); 

ich brauche 'schnell' zu ersetzen, je i auf die Zahlen senden

dh wenn meine Eingabe an eine Funktion ist 56, die quick vor 56 Bedürfnisse mit bear und wenn mein Eingang ist 78 auf eine Funktion ersetzt werden, t er schnell vor 78 muss ersetzt werden mit black

Kann mir bitte jemand dabei helfen?

Antwort

0

Anstatt mit preg_replace zu arbeiten, verwenden Sie substr_replace, um Ihre Zeichenfolge zu ersetzen, und strpos, um die Start- und Endpunkte innerhalb der Zeichenfolge basierend auf den Parametern zu finden, die Sie übergeben. Ihr Muster ist eine einfache Zeichenkette, daher ist kein regulärer Ausdruck erforderlich, und substr_replace ermöglicht es Ihnen, einen Anfangs- und Endpunkt in der Zeichenkette anzugeben, um Ersetzungen vorzunehmen (was genau das zu sein scheint, wonach Sie suchen).

EDIT:

auf Ihrem Kommentar Basierend, es klingt wie Sie eine Menge Kontrolle zu tun haben. Ich habe nicht getestet, so dass es einen Fehler oder zwei haben, aber versuchen, eine Funktion wie folgt aus:

function replace($number, $pattern, $replacement) 
{ 
    $input = "The quick sample_text_1 56 quick sample_text_2 78 fox jumped over the lazy dog."; 
    $end_pos = strpos($input, $number); 
    $output = ""; 
    if($end_pos !== false && substr_count($input, $pattern, 0, $end_pos)) 
    { 
     $start_pos = strrpos(substr($input, 0, $end_pos), $pattern); 
     $output = substr_replace($input, $replacement, $start_pos, ($start_pos + strlen($pattern))); 
    } 
    return $output; 
} 

Diese Funktion ist folgende:

  1. Prüfen Sie zunächst, dass die „Nummer“ Parameter existiert auch in der Zeichenfolge ($end_pos !== false)
  2. überprüfen Sie, ob Ihr Muster mindestens einmal existiert zwischen teh Anfang des Strings und die Position der Nummer (substr_count($input, $pattern, 0, $end_pos))
  3. Verwenden strrpos Funktion die Position des las zu bekommen t Auftreten des Musters innerhalb der Teilkette
  4. Verwenden Sie die Startposition und die Länge des Musters Ihre Ersatzzeichenfolge einfügen mit substr_replace
+0

Hallo reich, Dies war nur eine Saite Probe und ich weiß nicht Teil beginnen, wie die Eingänge der Anzahl sind, string ersetzt werden und die ersetzende Zeichenfolge . Ich versuchte es mit substr_replace und strpos aber kam wieder auf Platz – gnanesh

1

Ich denke, reguläre Ausdrücke machen dies schwierig, aber Sie sollten in der Lage sein, es zu tun unter Verwendung von nur strpos(), substr() und str_replace(). mit substr

  • Verwenden strpos die Position in der Kette von 56 und 78

  • Dann schneiden die Schnur nach oben in Teil an diesen Stellen zu finden.

  • Ersetzen Sie nun 'quick' durch die richtige Variable, je nachdem, ob 56 oder 78 an die Funktion gesendet wurde und mit welchem ​​Teilstring Sie es zu tun haben.

0

Sie machen es falsch. Stattdessen sollten Sie abhängig von Ihrer Funktionseingabe die richtigen Werte zum Suchen und Ersetzen verwenden.Erstellen Sie einfach eine Karte zum Suchen und Ersetzen von Werten in Abhängigkeit von Ihrem Funktionseingabewert. Wie:

$map = array(
    56 => array('patterns' => array(), 'replacements' => array()), 
    78 => array(...) 
); 
0

Versuchen Sie folgendes:

$searchArray = array("word1", "sound2", "etc3"); 
$replaceArray = array("word one", "sound two", "etc three"); 
$intoString = "Here is word1, as well sound2 and etc3"; 
//now let's replace 
print str_replace($searchArray, $replaceArray, $intoString); 
//it should print "Here is word one, as well sound two and etc three"