explode()
La función explode() divide una cadena en un array de subcadenas. La sintaxis de explode() es la siguiente:
La función explode() divide una cadena en un array de subcadenas, separándola en cada punto donde aparece un delimitador elegido. Es la forma estándar en PHP de convertir texto delimitado —una fila CSV, una fecha, una lista de etiquetas separadas por comas— en datos sobre los que puedes iterar. Es la función inversa de implode(), que une un array de nuevo en una cadena.
Esta página cubre la sintaxis, el parámetro opcional $limit (incluidos los valores negativos), el valor de retorno, los patrones de análisis más comunes y los errores típicos que suelen cometerse.
Sintaxis
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array| Parámetro | Obligatorio | Descripción |
|---|---|---|
$separator | sí | La cadena delimitadora sobre la que se divide. Se interpreta de forma literal, no como expresión regular. |
$string | sí | La cadena de entrada que se va a dividir. |
$limit | no | Controla cuántas partes se devuelven (véase más abajo). Por defecto es PHP_INT_MAX. |
La función devuelve un array de strings. Si $separator es una cadena vacía (""), explode() lanza un ValueError (en PHP 8+; en versiones anteriores devolvía false). Si el separador no aparece en la cadena, el resultado es un array de un solo elemento que contiene la cadena original completa.
Ejemplo básico
Definimos el delimitador ,, llamamos a explode() y mostramos el array resultante con print_r(). Cada elemento es todo lo que hay entre dos delimitadores.
La salida de este código será:
Array
(
[0] => Hello
[1] => World!
)Limitar el número de partes
El parámetro opcional $limit cambia la forma en que se divide la cadena:
- Límite positivo — el array contiene como máximo ese número de elementos; el último elemento guarda el resto de la cadena sin dividir.
- Cero — se trata como
1, por lo que la cadena completa se devuelve como un único elemento. - Límite negativo — se devuelven todas las partes excepto las últimas
|limit|.
Límite positivo
Con un límite de 3, la cadena se divide en como máximo tres elementos. Observa que el último elemento conserva el resto de la cadena sin dividir —three,four,five— en lugar de descartarlo.
La salida de este código será:
Array
(
[0] => one
[1] => two
[2] => three,four,five
)Esto es útil cuando solo te interesan los primeros campos; por ejemplo, explode(' ', $logLine, 2) para separar una marca de tiempo del resto de un mensaje de registro.
Límite negativo
Un límite negativo elimina elementos del final del resultado:
<?php
$string = "one,two,three,four,five";
print_r(explode(",", $string, -2));
?>Las dos últimas partes (four y five) se eliminan:
Array
(
[0] => one
[1] => two
[2] => three
)Patrones de análisis habituales
Un uso típico en el mundo real es leer un registro delimitado y limpiar los espacios de cada campo:
<?php
$csvRow = "Jane , Doe , [email protected] ";
$fields = array_map('trim', explode(",", $csvRow));
print_r($fields);
?>La salida son valores limpios, sin espacios en blanco:
Array
(
[0] => Jane
[1] => Doe
[2] => [email protected]
)explode() también funciona de forma natural con la desestructuración de list() para extraer partes con nombre de una cadena:
<?php
$date = "2026-06-21";
[$year, $month, $day] = explode("-", $date);
echo "Year: $year, Month: $month, Day: $day";
?>Salida:
Year: 2026, Month: 06, Day: 21Errores comunes
- El separador es literal, no una expresión regular.
explode("-", ...)divide en un guión, nunca en un patrón. Si necesitas una expresión regular (por ejemplo, dividir en cualquier secuencia de espacios en blanco), usapreg_split()en su lugar. - No puedes dividir en caracteres individuales con
explode(). Un separador vacío genera unValueError. Para dividir una cadena en caracteres individuales, usastr_split(). - Varios delimitadores consecutivos crean elementos vacíos.
explode(",", "a,,b")devuelve["a", "", "b"]. Fíltralos conarray_filter()si no los quieres. - ¿No se encuentra el separador? Igualmente obtienes un array válido —un array de un solo elemento con la cadena completa— por lo que puedes acceder de forma segura a
[0].
Funciones relacionadas
implode()/join()— la inversa: une un array en una cadena.str_split()— divide una cadena en fragmentos de longitud fija (o en caracteres).preg_split()— divide usando una expresión regular.substr()— extrae una parte de una cadena por posición.trim()— elimina los espacios en blanco de cada parte después de dividir.