2010-03-08 14 views
19

Puede utilizar matrices con str_replace():str_replace() con arreglo asociativo

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

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

Pero lo que si tiene arreglo asociativo?

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

¿Cómo se puede usar con str_replace()?
La velocidad importa: la matriz es lo suficientemente grande.

Respuesta

37

$text = strtr($text, $array_from_to)

Por cierto, que todavía es un uno "array". Dimensional

+0

sí, mi mal. lo cambié – Qiao

+0

no es la solución perfecta para el problema establecido (las longitudes de causa deben ser las mismas), pero es ideal en mi caso. Y la velocidad es rápida. – Qiao

+3

'strtr' funciona bien con valores de reemplazo que difieren en longitud del valor de búsqueda. La diferencia entre esto y 'str_replace' es que' strtr' solo hará una traducción (la más larga se empareja primero), que será más rápida (pero con diferentes resultados). Por ejemplo, ['ab' => 'c', 'c' => 'd'] traducirá 'ab' a 'c', mientras que con str_replace se convertirá en 'd'. – 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); 

El campo to ignorará las llaves en su matriz. La función clave aquí es array_keys.

+1

¡Guau! Un uso muy inteligente de funciones aquí. ¡Incluso en 2014 esto funciona maravillosamente! – arrayown

+1

Gracias @ user1383815 - el tiempo vuela: me sentí como este mensaje recién teletransportado. – mauris

+0

¿Podría $ array_from_ atravesar en diferente orden que lo que devuelve array_keys()? – PhoneixS

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

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

Resultados en Hello Qiao, welcome to stackoverflow..

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

Esta no es una matriz bidimensional, sino una matriz asociativa.

Ampliando el primer ejemplo, donde colocamos $ search como las teclas de la matriz, y $ replace como sus valores, el código sería así.

$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); 

Resultados en 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