> Faqs > Eliminar cadenas dentro de otra cadena en PHP

Eliminar cadenas dentro de otra cadena en PHP

Quisiera hacer una cosa simple en PHP pero desconozco bien las funciones de cadena del lenguaje. Se trate de eliminar de una cadena de texto en PHP posibles ocurrencias de otras cadenas de texto que yo le diga.

Lo que tengo de entrada es una cadena con nombres separados por comas:

"nombre, nombre2, otro nombre"

Luego tengo un array con nombres

['nombre', 'xxxxx'] 

quiero eliminar las apariciones de los nombres del array en la cadena y obtener la cadena resultante limpiada.

Respuestas

Después de investigar un poco os dejo aquí mi propia solución. Funciona bien, así que creo que es una buena respuesta.

Para eliminar las apariciones de los nombres del array en la cadena en PHP primero voy a dividir la cadena original en un array de nombres.

Luego voy a crear un nuevo array excluyendo los nombres que están presentes en el array dado y por último volver a unir el array resultante en una cadena con los nombres separados por comas.

<?php
$cadena = "nombre, nombre2, otro nombre";

$nombres_a_eliminar = ['nombre'];

$lista_nombres = array_map('trim', explode(',', $cadena));

// aqui es donde se crea el un nuevo array excluyendo los nombres a eliminar, es la parte un poco más complicada
$nueva_lista_nombres = array_filter($lista_nombres, function($nombre) use ($nombres_a_eliminar) {
    return !in_array($nombre, $nombres_a_eliminar);
});

$nueva_cadena = implode(', ', $nueva_lista_nombres);

echo $nueva_cadena;
?>

Lo que he aprendido es que array_map('trim', $array)` elimina los posibles espacios en blanco alrededor de cada nombre.

Luego con array_filter($array, $callback) se crea un nuevo array utilizando una función de callback, parecido a como se hace en javascript.

Por útimo, implode(', ', $array) vuelve a unir el array en una cadena, separando los nombres por comas y espacios.

Victor
300 8 21 16