¿Buscar y reemplazar valores múltiples con valores múltiples/diferentes en PHP?

2 minutos de lectura

avatar de usuario de atomicharri
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

avatar de usuario de nithi
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;

avatar de usuario de caos
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á).

¿Ha sido útil esta solución?