str_split()
Artigo sobre a função PHP str_split(), usada para dividir uma string em um array, com sintaxe, parâmetros e exemplos práticos.
A função PHP str_split() divide uma string em um array de partes menores. Por padrão, cada parte é um único caractere, mas você pode solicitar fragmentos de tamanho fixo. É a função ideal quando você precisa iterar sobre uma string caractere por caractere ou processá-la em blocos de tamanho igual.
Esta página cobre a sintaxe, o parâmetro de comprimento do fragmento, o valor retornado e o problema com strings multibyte que costuma surpreender a maioria dos desenvolvedores.
Sintaxe
str_split(string $string, int $length = 1): arrayA função aceita dois parâmetros:
$string— a string a ser dividida. Obrigatório.$length— o comprimento de cada fragmento, em bytes. Opcional; padrão é1. Deve ser1ou maior (um valor menor que1gera umValueErrorno PHP 8.0+).
Ela retorna um array de fragmentos de string. Se $string estiver vazia, o resultado será um array vazio ([]) no PHP 8.2 e versões posteriores. O último fragmento pode ser menor que $length quando o comprimento da string não é um múltiplo exato dele.
Dividindo em caracteres individuais
Sem o segundo argumento, str_split() retorna um elemento do array por caractere. Isso é útil para percorrer cada caractere ou contar caracteres por categoria.
A saída é um array onde cada caractere tem seu próprio índice:
Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
[5] => ,
[6] =>
[7] => W
[8] => o
[9] => r
[10] => l
[11] => d
[12] => !
)Dividindo em fragmentos de tamanho fixo
Passe um $length para agrupar os caracteres em fragmentos desse tamanho. Isso é útil para formatar strings, como dividir um número de cartão em grupos, ou processar dados binários em blocos fixos.
<?php
$string = "Hello, World!";
$chunks = str_split($string, 3);
print_r($chunks);
?>A string tem 13 caracteres, portanto é dividida em quatro fragmentos de 3 mais um fragmento final de 1:
Array
(
[0] => Hel
[1] => lo,
[2] => Wo
[3] => rld
[4] => !
)Atenção com strings multibyte
str_split() opera sobre bytes, não caracteres. Para texto ASCII, um byte equivale a um caractere, portanto o comportamento padrão parece uma divisão por caracteres. Mas caracteres UTF-8 como é ou emojis ocupam múltiplos bytes, e str_split() irá quebrá-los, produzindo fragmentos inválidos:
<?php
print_r(str_split("héllo"));
?>Array
(
[0] => h
[1] => Ã
[2] => ©
[3] => l
[4] => l
[5] => o
)O é foi dividido em dois bytes corrompidos. Quando você precisa dividir uma string UTF-8 por caracteres reais, use mb_str_split() — ela é compatível com multibyte e mantém cada caractere intacto.
Quando usar str_split() vs. explode()
Use str_split() quando quiser dividir uma string em uma posição ou comprimento fixo — cada caractere individualmente ou a cada N bytes. Use explode() quando quiser dividir por um delimitador, como uma vírgula ou um espaço. Para reconstruir uma string a partir de um array, veja implode(), e para dividir com uma expressão regular, veja preg_split().