2010-03-08 7 views
19

Sie Arrays mit str_replace() verwenden:str_replace() mit assoziativem Array

$array_from = array ('from1', 'from2'); 
$array_to = array ('to1', 'to2'); 

$text = str_replace ($array_from, $array_to, $text); 

Aber was, wenn Sie assoziatives Array haben?

$array_from_to = array (
'from1' => 'to1'; 
'from2' => 'to2'; 
); 

Wie können Sie es mit str_replace() verwenden?
Geschwindigkeit ist wichtig - Array ist groß genug.

Antwort

37

$text = strtr($text, $array_from_to)

Durch die Art und Weise, dass immer noch ein eindimensionales "Array".

+0

Yep, mein Schlechter. änderte es – Qiao

+0

es ist keine perfekte Lösung für das angegebene Problem (Ursache Längen sollten gleich sein), aber es ist ideal in meinem Fall. Und Geschwindigkeit ist schnell. – Qiao

+3

'strtr 'funktioniert gut mit Ersatzwerten, die sich in der Länge vom Suchwert unterscheiden. Der Unterschied zwischen 'str_replace' und 'str_replace' besteht darin, dass 'strtr' nur eine Übersetzung durchführt (die längste wird zuerst abgeglichen), was schneller ist (aber mit anderen Ergebnissen). Zum Beispiel wird ['ab' => 'c', 'c' => 'd'] 'ab' in 'c' umwandeln, während es mit str_replace 'd' wird. – Matthew

1
$keys = array_keys($array); 
$values = array_values($array); 
$text = str_replace($key, $values, $string); 
24
$array_from_to = array (
    'from1' => 'to1', 
    'from2' => 'to2' 
); 

$text = str_replace(array_keys($array_from_to), $array_from_to, $text); 

Das to Feld der Schlüssel in Ihrem Array ignorieren. Die Schlüsselfunktion ist hier array_keys.

+1

Wow! Ein sehr geschickter Einsatz von Funktionen hier. Auch im Jahr 2014 funktioniert das wunderbar! – arrayown

+1

Vielen Dank @ user1383815 - Zeit vergeht: fühlte sich wie dieser Post nur teleportiert. – mauris

+0

Könnte $ array_from_ in einer anderen Reihenfolge durchlaufen werden, als array_keys() zurückgibt? – PhoneixS

2
$search = array('{user}', '{site}'); 
$replace = array('Qiao', 'stackoverflow'); 
$subject = 'Hello {user}, welcome to {site}.'; 

echo str_replace ($search, $replace, $subject); 

Ergebnisse in Hello Qiao, welcome to stackoverflow..

$array_from_to = array (
    'from1' => 'to1'; 
    'from2' => 'to2'; 
); 

Dies ist kein zweidimensionales Array, es ist ein assoziatives Array.

Erweiterung auf das erste Beispiel, wo wir die $ Suche als die Schlüssel des Arrays und die $ ersetzen, wie es Werte ist, würde der Code so aussehen.

$searchAndReplace = array(
    '{user}' => 'Qiao', 
    '{site}' => 'stackoverflow' 
); 

$search = array_keys($searchAndReplace); 
$replace = array_value($searchAndReplace); 
# Our subject is the same as our first example. 

echo str_replace ($search, $replace, $subject); 

Ergebnisse in Hello Qiao, welcome to stackoverflow..

3
$text='yadav+RAHUL(from2'; 

    $array_from_to = array('+' => 'Z1', 
         '-' => 'Z2', 
         '&' => 'Z3', 
         '&&' => 'Z4', 
         '||' => 'Z5', 
         '!' => 'Z6', 
         '(' => 'Z7', 
         ')' => 'Z8', 
         '[' => 'Z9', 
         ']' => 'Zx1', 
         '^' => 'Zx2', 
         '"' => 'Zx3', 
         '*' => 'Zx4', 
         '~' => 'Zx5', 
         '?' => 'Zx6', 
         ':' => 'Zx7', 
         "'" => 'Zx8'); 

    $text = strtr($text,$array_from_to); 

    echo $text; 

//output is 

yadavZ1RAHULZ7from2