str_split()
Articolo sulla funzione PHP str_split(), usata per suddividere una stringa in un array. Sintassi, parametri e casi d'uso con esempi pratici.
La funzione PHP str_split() suddivide una stringa in un array di parti più piccole. Per impostazione predefinita ogni parte è un singolo carattere, ma è possibile richiedere blocchi di lunghezza fissa. È la funzione ideale quando si desidera iterare su una stringa carattere per carattere o elaborarla in blocchi di dimensioni uguali.
Questa pagina illustra la sintassi, il parametro per la lunghezza dei blocchi, il valore restituito e il problema con le stringhe multibyte che mette in difficoltà la maggior parte degli sviluppatori.
Sintassi
str_split(string $string, int $length = 1): arrayLa funzione accetta due parametri:
$string— la stringa da suddividere. Obbligatorio.$length— la lunghezza di ciascun blocco, in byte. Facoltativo; il valore predefinito è1. Deve essere1o maggiore (un valore inferiore a1genera unValueErrorin PHP 8.0+).
Restituisce un array di blocchi di stringa. Se $string è vuota, il risultato è un array vuoto ([]) in PHP 8.2 e versioni successive. L'ultimo blocco può essere più corto di $length quando la lunghezza della stringa non è un multiplo esatto di esso.
Suddivisione in singoli caratteri
Senza il secondo argomento, str_split() restituisce un elemento dell'array per ogni carattere. Questo è utile per iterare su ogni carattere o contare i caratteri per categoria.
L'output è un array in cui ogni carattere ha il proprio indice:
Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
[5] => ,
[6] =>
[7] => W
[8] => o
[9] => r
[10] => l
[11] => d
[12] => !
)Suddivisione in blocchi di lunghezza fissa
Passare un $length raggruppa i caratteri in blocchi di quella dimensione. Questo è utile per formattare stringhe, ad esempio suddividere un numero di carta in gruppi, o elaborare dati binari in blocchi fissi.
<?php
$string = "Hello, World!";
$chunks = str_split($string, 3);
print_r($chunks);
?>La stringa ha 13 caratteri, quindi viene suddivisa in quattro blocchi da 3 più un blocco finale da 1:
Array
(
[0] => Hel
[1] => lo,
[2] => Wo
[3] => rld
[4] => !
)Attenzione alle stringhe multibyte
str_split() opera sui byte, non sui caratteri. Per il testo ASCII un byte corrisponde a un carattere, quindi il comportamento predefinito sembra una suddivisione per carattere. Ma i caratteri UTF-8 come é o le emoji occupano più byte, e str_split() li spezzerà, producendo frammenti non validi:
<?php
print_r(str_split("héllo"));
?>Array
(
[0] => h
[1] => Ã
[2] => ©
[3] => l
[4] => l
[5] => o
)La é è stata restituita come due byte corrotti. Quando è necessario suddividere una stringa UTF-8 per caratteri reali, utilizzare invece mb_str_split() — è consapevole del multibyte e mantiene integro ogni carattere.
Quando usare str_split() invece di explode()
Usa str_split() quando vuoi suddividere una stringa in una posizione o lunghezza fissa — ogni singolo carattere o ogni N byte. Usa explode() quando vuoi suddividere in base a un delimitatore come una virgola o uno spazio. Per ricostruire una stringa da un array, vedi implode(), e per suddividere con un'espressione regolare, vedi preg_split().