Estoy teniendo algunos problemas con la función PHP str_replace
cuando se utilizan matrices.
Tengo este mensaje:
$message = strtolower("L rzzo rwldd ty esp mtdsza'd szdepw ty esp opgtw'd dple");
Y estoy tratando de usar str_replace
así:
$new_message = str_replace(
array('l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k'),
array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'),
$message);
El resultado debería ser A good glass in the bishop's hostel in the devil's seat
, pero en su lugar, obtengo p voos vlpss xn twt qxswop's wosttl xn twt stvxl's stpt
.
Sin embargo, cuando intento sustituir sólo 2 letras, las sustituye bien:
$new_message = str_replace(array('l','p'), array('a','e'), $message);
las letras l
y p
serán reemplazadas por a
y e
.
¿Por qué no funciona con el alfabeto completo si ambos tienen exactamente el mismo tamaño?
Dado que str_replace() reemplaza de izquierda a derecha, podría reemplazar un valor previamente insertado al realizar reemplazos múltiples.
pre> // Sale F porque A es reemplazado por B, luego B es reemplazado por C, y así sucesivamente... // Finalmente E es reemplazado por F, debido a los reemplazos de izquierda a derecha. $search = array('A', 'B', 'C', 'D', 'E'); $replace = array('B', 'C', 'D', 'E', 'F'); $subject = 'A'; echo str_replace($buscar, $reemplazar, $asunto);
str_replace
con matrices sólo realiza todas las sustituciones secuencialmente. Utiliza strtr
en su lugar para hacerlos todos a la vez:
$new_message = strtr($message, 'lmnopq...', 'abcdef...');
Fácil y mejor que str_replace
:
<?php
$arr = array(
"http://" => "http://www.",
"w" => "W",
"d" => "D");
$word = "http://desiweb.ir";
echo strtr($word,$arr);
?>
strtr
PHP doc aquí