Menu

PHP explode(): dividir uma string em array

explode(',', $string) divide uma string em cada vírgula e retorna as partes como um array. Veja o parâmetro limit, como dividir por quebra de linha, aplicar trim nas partes e quando str_split ou preg_split são a ferramenta melhor.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

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 como 1.

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çãoDivide emExemploResultado
explode()uma string separadora fixaexplode('-', '2026-03-14')['2026', '03', '14']
str_split()a cada N bytesstr_split('abcdef', 2)['ab', 'cd', 'ef']
mb_str_split()a cada N caracteresmb_str_split('日本語')['日', '本', '語']
preg_split()uma expressão regularpreg_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().

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR