str_replace - substr php
str_replace con array (4)
Como alternativa a la respuesta marcada como correcta, si tiene que reemplazar palabras en lugar de caracteres, puede hacerlo con este código:
$query = "INSERT INTO my_table VALUES (?, ?, ?, ?);";
$values = Array("apple", "oranges", "mangos", "papayas");
foreach (array_fill(0, count($values), ''?'') as $key => $wildcard) {
$query = substr_replace($query, ''"''.$values[$key].''"'', strpos($query, $wildcard), strlen($wildcard));
}
echo $query;
Demostración aquí: http://sandbox.onlinephpfunctions.com/code/56de88aef7eece3d199d57a863974b84a7224fd7
Estoy teniendo algunos problemas con la función PHP str_replace
al usar 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
esta manera:
$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 cambio, obtengo p voos vlpss xn twt qxswop''s wosttl xn twt stvxl''s stpt
.
Sin embargo, cuando solo trato de reemplazar 2 letras las reemplaza 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 la matriz alfabética completa si ambos son exactamente del mismo tamaño?
Debido a que str_replace () reemplaza de izquierda a derecha, podría reemplazar un valor insertado previamente al hacer reemplazos múltiples.
// Outputs F because A is replaced with B, then B is replaced with C, and so on... // Finally E is replaced with F, because of left to right replacements. $search = array(''A'', ''B'', ''C'', ''D'', ''E''); $replace = array(''B'', ''C'', ''D'', ''E'', ''F''); $subject = ''A''; echo str_replace($search, $replace, $subject);
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 here
str_replace
con matrices simplemente realiza todos los reemplazos secuencialmente. Use strtr
lugar de hacerlos todos a la vez:
$new_message = strtr($message, ''lmnopq...'', ''abcdef...'');