atomicharri
¿Existe una función PHP incorporada para reemplazar múltiples valores dentro de una cadena con una matriz que dicta exactamente qué se reemplaza con qué?
Por ejemplo:
$searchreplace_array = Array('blah' => 'bleh', 'blarh' => 'blerh');
$string = 'blah blarh bleh bleh blarh';
Y el resultado sería: ‘bleh blerh bleh bleh blerh’.
Estás buscando str_replace()
.
$string = 'blah blarh bleh bleh blarh';
$result = str_replace(
array('blah', 'blarh'),
array('bleh', 'blerh'),
$string
);
// Consejo adicional:
Y si está atascado con una matriz asociativa como en su ejemplo, puede dividirla así:
$searchReplaceArray = array(
'blah' => 'bleh',
'blarh' => 'blerh'
);
$result = str_replace(
array_keys($searchReplaceArray),
array_values($searchReplaceArray),
$string
);
-
array_values()
no es necesario —str_replace()
ignorará las claves de las matrices pasadas como argumentos 1 y 2 (buscar matriz y reemplazar matriz).– mickmackusa
6 de marzo a las 23:31
niti
$string = 'blah blarh bleh bleh blarh';
$trans = array("blah" => "blerh", "bleh" => "blerh");
$result = strtr($string,$trans);
Puedes comprobar el manual para una explicación detallada.
-
Usé el mismo para reemplazar la matriz 🙂 al convertir la matriz y reemplazarla 🙂
– Shan
17 de marzo de 2015 a las 1:25
-
Simple $%^& muchas gracias… Yo esta respuesta es oro… No puedo creer que esto sea tan viejo…. (Y)
–Rodrigo Zuluaga
19 de noviembre de 2022 a las 23:04
EN CASO de que alguien esté buscando reemplazar las mismas cadenas con diferentes valores (por ocurrencia). Ejemplo, para reemplazar todo ## por números ++ O valores de una matriz-
$split_at="##";
$string = "AA ## BB ## CC ## DD";
$new_string = '';
// echo $string;
$replace_num = 1;
$replace_arr = ['first' , 'second' , 'third'];
$split_at_cnt = substr_count($string, $split_at);
for ($split=0; $split <= $split_at_cnt; $split++)
{
$new_string .= str_replace('##', ($replace_num++)." : ".$replace_arr[$split], substr( $string, 0, strpos($string, $split_at)+strlen($split_at)));
$string = substr($string, strpos($string, $split_at)+strlen($split_at));
}
echo $new_string;
caos
str_replace()
hace eso.
Puedes comprobar el manual para una explicación más detallada.
Por lo que tienes allí, solo pasa esa matriz a str_replace
como la búsqueda y el reemplazo (usando array_keys
en el parámetro de búsqueda si desea mantener la matriz tal como está).