Menu

PHP explode(): dividir un string en un array

explode(',', $string) divide una cadena en cada coma y devuelve los trozos como array. Aprende el parámetro limit, cómo dividir por saltos de línea, recortar los trozos y cuándo es mejor str_split o preg_split.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

explode($separator, $string) divide una cadena en cada aparición de $separator y devuelve los trozos como array. explode(',', 'apple,banana,cherry') da ['apple', 'banana', 'cherry'].

El separador puede ser cualquier cadena, no solo un carácter: explode(' and ', 'tea and milk and sugar') funciona igual. La operación contraria, volver a unir un array en una cadena, es implode().

Sintaxis y valor de retorno

explode(string $separator, string $string, int $limit = PHP_INT_MAX): array

Siempre devuelve un array. Si el separador no aparece, el array contiene la cadena completa como único elemento. Eso incluye la cadena vacía, que da un array con una cadena vacía dentro, una fuente habitual de bugs del tipo "mi bucle se ejecuta una vez con una entrada vacía".

Limitar el número de trozos

El tercer argumento, $limit, cambia cuántos trozos obtienes:

  • Un límite positivo devuelve como máximo esa cantidad de trozos. El último trozo contiene el resto de la cadena, separadores incluidos.
  • Un límite negativo devuelve todos los trozos salvo los últimos abs($limit).
  • Un límite de 0 se trata como 1.

Un límite positivo es la herramienta adecuada cuando solo importa el primer separador, por ejemplo una línea key=value en la que el valor también puede contener =: explode('=', 'query=a=b', 2) da ['query', 'a=b']. Las secciones siguientes lo usan así.

Para obtener solo el último trozo, guarda antes el array en una variable: $parts = explode('/', $path); $file = end($parts);. Escribir end(explode('/', $path)) sigue devolviendo el valor correcto, pero PHP imprime Notice: Only variables should be passed by reference, porque end() recibe su argumento por referencia.

Dividir una cadena por saltos de línea

explode("\n", $text) divide en los saltos de línea. Usa comillas dobles: entre comillas simples, '\n' es una barra invertida seguida de la letra n, no un salto de línea. El texto de archivos de Windows o de formularios HTML suele terminar las líneas con "\r\n", lo que deja un "\r" suelto al final de cada trozo. preg_split('/\R/', $text) divide en cualquier tipo de salto de línea.

Recortar los trozos y descartar los vacíos

Una entrada del usuario como "red, green , ,blue" tiene espacios alrededor de los elementos y un elemento vacío en medio. Pasa los trozos por trim() con array_map() y luego elimina las cadenas vacías con array_filter(). array_values() renumera después las claves, porque array_filter() conserva las originales.

El callback fn($c) => $c !== '' conserva la cadena "0". Un array_filter($colors) sin callback la descartaría, porque "0" es falsy.

Convertir una cadena en un array asociativo

Los ajustes, las cookies y las cadenas tipo query suelen guardarse como pares key=value. Usa explode dos veces: una para los pares y otra para cada par con un límite de 2, desempaquetando los dos trozos en variables (desestructuración de arrays).

Un par sin =, como debug, da un array de un elemento, y la desestructuración imprime Warning: Undefined array key 1. Rellena el resultado hasta dos elementos para evitarlo: [$key, $value] = explode('=', $pair, 2) + [1 => ''];.

Para una query string real de una URL, parse_str() hace esto por ti y además decodifica %20 y +.

Dividir por varios delimitadores

explode() acepta un solo separador. Para dividir en comas, puntos y coma o espacios, usa preg_split() con una clase de caracteres. PREG_SPLIT_NO_EMPTY descarta los trozos vacíos que crearían dos delimitadores seguidos.

Japonés y otro texto UTF-8

explode() compara bytes, y en UTF-8 un carácter completo nunca aparece dentro de los bytes de otro carácter, así que dividir texto japonés por un separador japonés como 、 o una coma de ancho completo funciona correctamente.

explode vs str_split vs preg_split

FunciónDivide enEjemploResultado
explode()una cadena separadora fijaexplode('-', '2026-03-14')['2026', '03', '14']
str_split()cada N bytesstr_split('abcdef', 2)['ab', 'cd', 'ef']
mb_str_split()cada N caracteresmb_str_split('日本語')['日', '本', '語']
preg_split()una expresión regularpreg_split('/\s+/', 'a b')['a', 'b']

explode() no trabaja con expresiones regulares, así que es más rápido que preg_split() y es el que debes usar siempre que el separador sea una cadena fija.

Error frecuente: un separador vacío

Un separador vacío es un error. Desde PHP 8.0, explode('', 'abc') lanza un ValueError en lugar de devolver false, y el script se detiene:

PHP Fatal error:  Uncaught ValueError: explode(): Argument #1 ($separator) cannot be empty in /home/index.php:3

Para dividir una cadena en caracteres, usa str_split('abc') con texto ASCII o mb_str_split($s) con cualquier texto que pueda contener caracteres multibyte.

Preguntas frecuentes

¿Qué hace explode() en PHP?

Divide una cadena en cada aparición de un separador y devuelve los trozos como array: explode(',', 'a,b,c') devuelve ['a', 'b', 'c']. El separador no se incluye en ningún trozo.

¿Qué devuelve explode() si no encuentra el separador?

Un array con un elemento, la cadena completa: explode(',', 'apple') devuelve ['apple']. Una cadena vacía da [''], un array con una cadena vacía, así que count() devuelve 1, no 0.

¿Cómo divido una cadena por varios delimitadores en PHP?

Usa preg_split() con una clase de caracteres: preg_split('/[,;|]/', $s) divide en comas, puntos y coma y barras verticales. Para descartar además los trozos vacíos, pasa un límite de -1 y el flag: preg_split('/[,;|]/', $s, -1, PREG_SPLIT_NO_EMPTY).

¿Cuál es la diferencia entre explode() y str_split()?

explode() divide en un separador que eliges tú. str_split($s, 3) corta la cadena en trozos de longitud fija, contada en bytes. Para japonés u otro texto multibyte usa mb_str_split($s), que cuenta caracteres.

¿Por qué explode() lanza un ValueError?

Porque el separador es una cadena vacía. Desde PHP 8.0, explode('', $s) lanza ValueError: explode(): Argument #1 ($separator) cannot be empty. Para dividir una cadena en caracteres sueltos usa str_split() o mb_str_split().

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR