explode e implode en PHP: dividir y unir cadenas

explode() divide una cadena en un array usando un separador, y implode() (también accesible como join()) hace la operación inversa: une los elementos de un array en una cadena. Estas dos funciones se usan juntas constantemente para parsear CSVs, montar listas SQL o transformar etiquetas separadas por comas.

Sintaxis

<?php
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
implode(string $separator, array $array): string
?>

El parámetro $limit de explode() es opcional pero tiene un comportamiento que conviene conocer: si es positivo, limita el número máximo de elementos devueltos; si es negativo, devuelve todos los fragmentos excepto los últimos |limit|.

Parsear una cadena CSV simple

<?php
$linea = 'zapatillas,talla 42,negro,129.90,en stock';

$campos = explode(',', $linea);

echo $campos[0]; // zapatillas
echo $campos[3]; // 129.90
echo count($campos); // 5
?>

Para ficheros CSV reales con comillas y escapes usa str_getcsv() en lugar de explode(): maneja los casos de comas dentro de valores entre comillas que explode() no puede distinguir.

El parámetro limit con valor positivo y negativo

<?php
$ruta = 'blog/tecnologia/php/funciones-cadena';

// Limit positivo: máximo 2 elementos
$partes = explode('/', $ruta, 2);
print_r($partes);
// Array ( [0] => blog [1] => tecnologia/php/funciones-cadena )

// Limit negativo: todos excepto el último
$sin_ultimo = explode('/', $ruta, -1);
print_r($sin_ultimo);
// Array ( [0] => blog [1] => tecnologia [2] => php )
?>

El limit negativo es especialmente útil para eliminar el último segmento de una ruta sin necesidad de hacer un array_pop() después.

Construir listas con implode()

<?php
$etiquetas = ['PHP', 'backend', 'funciones', 'cadenas'];

// Lista legible para mostrar
echo implode(', ', $etiquetas);
// PHP, backend, funciones, cadenas

// Lista para una cláusula SQL IN
$ids     = [12, 45, 78, 103];
$placeholders = implode(', ', array_fill(0, count($ids), '?'));
echo $placeholders; // ?, ?, ?, ?
?>

Patrón clásico: explode, filtrar, implode

Combinar las dos funciones es la forma más limpia de limpiar una lista delimitada:

<?php
// Etiquetas de un formulario, pueden venir con espacios y vacíos
$entrada = ' php , , javascript , , rust ';

$etiquetas = explode(',', $entrada);
$etiquetas = array_map('trim', $etiquetas);        // quitar espacios
$etiquetas = array_filter($etiquetas);              // eliminar vacíos
$etiquetas = array_values($etiquetas);              // reindexar

$resultado = implode(',', $etiquetas);
echo $resultado;
// php,javascript,rust
?>

Casos límite: separador vacío y la función split() eliminada

Pasar un separador vacío a explode() lanza un ValueError en PHP 8 (y devolvía false en PHP 7). Si necesitas dividir una cadena en caracteres individuales usa str_split():

<?php
$palabra = 'PHP';

// explode('', $palabra); // ValueError en PHP 8

$letras = str_split($palabra);
print_r($letras);
// Array ( [0] => P [1] => H [2] => P )

// str_split con longitud mayor de 1
$bloques = str_split('ABCDEF', 2);
print_r($bloques);
// Array ( [0] => AB [1] => CD [2] => EF )
?>

La función split(), que existía en PHP 4 y 5 y aceptaba expresiones regulares, se eliminó definitivamente en PHP 7. Si encuentras código legacy que la use, sustitúyela por preg_split().

La documentación oficial de explode() y la de implode() detallan el comportamiento con cadenas vacías y los cambios entre versiones.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP