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.
