explode($separator, $string) divide uma string em cada ocorrência de $separator e retorna as partes como um array. explode(',', 'apple,banana,cherry') dá ['apple', 'banana', 'cherry'].
O separador pode ser qualquer string, não só um caractere: explode(' and ', 'tea and milk and sugar') funciona do mesmo jeito. A operação inversa, juntar um array de volta numa string, é o implode().
Sintaxe e valor de retorno
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
Ele sempre retorna um array. Se o separador não aparece, o array guarda a string inteira como único elemento. Isso inclui a string vazia, que dá um array com uma string vazia dentro, uma fonte comum de bugs do tipo "meu loop roda uma vez com entrada vazia".
Limitar o número de partes
O terceiro argumento, $limit, muda quantas partes você recebe:
- Um limite positivo retorna no máximo essa quantidade de partes. A última parte guarda o resto da string, com os separadores.
- Um limite negativo retorna todas as partes menos as últimas
abs($limit). - Um limite
0é tratado como1.
Um limite positivo é a ferramenta certa quando só o primeiro separador importa, por exemplo uma linha key=value em que o valor também pode ter =: explode('=', 'query=a=b', 2) dá ['query', 'a=b']. As próximas seções o usam assim.
Para pegar só a última parte, guarde o array numa variável antes: $parts = explode('/', $path); $file = end($parts);. Escrever end(explode('/', $path)) ainda retorna o valor certo, mas o PHP imprime Notice: Only variables should be passed by reference, porque o end() recebe o argumento por referência.
Dividir uma string por quebra de linha
explode("\n", $text) divide nas quebras de linha. Use aspas duplas: entre aspas simples, '\n' é uma barra invertida seguida da letra n, não uma quebra de linha. Texto de arquivos do Windows ou de formulários HTML costuma terminar as linhas com "\r\n", o que deixa um "\r" sobrando no fim de cada parte. preg_split('/\R/', $text) divide em qualquer tipo de quebra de linha.
Aplicar trim nas partes e descartar as vazias
Entradas do usuário como "red, green , ,blue" têm espaços em volta dos itens e um item vazio no meio. Passe as partes pelo trim() com array_map() e depois remova as strings vazias com array_filter(). O array_values() renumera as chaves depois, porque o array_filter() mantém as originais.
O callback fn($c) => $c !== '' mantém a string "0". Um array_filter($colors) sem callback a descartaria, porque "0" é falso.
Transformar uma string num array associativo
Configurações, cookies e strings no estilo de query costumam ser guardados como pares key=value. Aplique explode duas vezes: uma para os pares e outra para cada par com limite 2, desempacotando as duas partes em variáveis (desestruturação de array).
Um par sem =, como debug, dá um array de um elemento, e a desestruturação imprime Warning: Undefined array key 1. Complete o resultado para dois elementos para evitar isso: [$key, $value] = explode('=', $pair, 2) + [1 => ''];.
Para uma query string de URL de verdade, o parse_str() faz isso por você e também decodifica %20 e +.
Dividir por vários delimitadores
O explode() recebe um separador. Para dividir em vírgulas, pontos e vírgulas ou espaços, use preg_split() com uma classe de caracteres. PREG_SPLIT_NO_EMPTY descarta as partes vazias que dois delimitadores seguidos criariam.
Japonês e outros textos UTF-8
O explode() compara bytes, e em UTF-8 um caractere completo nunca aparece dentro dos bytes de outro caractere, então dividir texto japonês num separador japonês como 、 ou uma vírgula de largura total funciona corretamente.
explode, str_split ou preg_split
| Função | Divide em | Exemplo | Resultado |
|---|---|---|---|
explode() | uma string separadora fixa | explode('-', '2026-03-14') | ['2026', '03', '14'] |
str_split() | a cada N bytes | str_split('abcdef', 2) | ['ab', 'cd', 'ef'] |
mb_str_split() | a cada N caracteres | mb_str_split('日本語') | ['日', '本', '語'] |
preg_split() | uma expressão regular | preg_split('/\s+/', 'a b') | ['a', 'b'] |
O explode() não faz trabalho de regex, então é mais rápido que o preg_split() e é o que você deve usar sempre que o separador for uma string fixa.
Erro comum: separador vazio
Um separador vazio é erro. Desde o PHP 8.0, explode('', 'abc') lança um ValueError em vez de retornar false, e o script para:
PHP Fatal error: Uncaught ValueError: explode(): Argument #1 ($separator) cannot be empty in /home/index.php:3
Para dividir uma string em caracteres, use str_split('abc') para texto ASCII ou mb_str_split($s) para qualquer coisa que possa conter caracteres multibyte.
Perguntas frequentes
O que faz o explode() no PHP?
Ele divide uma string em cada ocorrência de um separador e retorna as partes como um array: explode(',', 'a,b,c') retorna ['a', 'b', 'c']. O separador em si não entra em nenhuma parte.
O que o explode() retorna se o separador não for encontrado?
Um array com um elemento, a string inteira: explode(',', 'apple') retorna ['apple']. Uma string vazia dá [''], um array com uma string vazia, então count() retorna 1, não 0.
Como divido uma string por vários delimitadores no PHP?
Use preg_split() com uma classe de caracteres: preg_split('/[,;|]/', $s) divide em vírgulas, pontos e vírgulas e barras verticais. Para também descartar partes vazias, passe um limite de -1 e a flag: preg_split('/[,;|]/', $s, -1, PREG_SPLIT_NO_EMPTY).
Qual a diferença entre explode() e str_split()?
O explode() divide num separador que você escolhe. str_split($s, 3) corta a string em pedaços de tamanho fixo, contados em bytes. Para japonês ou outro texto multibyte, use mb_str_split($s), que conta caracteres.
Por que o explode() lança um ValueError?
Porque o separador é uma string vazia. Desde o PHP 8.0, explode('', $s) lança ValueError: explode(): Argument #1 ($separator) cannot be empty. Para dividir uma string em caracteres, use str_split() ou mb_str_split().