W3docs

str_split()

Notre article porte sur la fonction PHP str_split(), utilisée pour diviser une chaîne en tableau. Nous abordons sa syntaxe et son utilisation.

La fonction PHP str_split() divise une chaîne en tableau de fragments plus petits. Par défaut, chaque fragment est un seul caractère, mais vous pouvez demander des morceaux de longueur fixe. C'est la fonction idéale pour itérer sur une chaîne caractère par caractère ou la traiter en blocs de taille égale.

Cette page couvre la syntaxe, le paramètre de longueur de fragment, la valeur de retour, et le piège des chaînes multioctets qui surprend la plupart des développeurs.

Syntaxe

str_split(string $string, int $length = 1): array

La fonction accepte deux paramètres :

  • $string — la chaîne à diviser. Obligatoire.
  • $length — la longueur de chaque fragment, en octets. Facultatif ; vaut 1 par défaut. Doit être supérieur ou égal à 1 (une valeur inférieure à 1 déclenche une ValueError en PHP 8.0+).

Elle retourne un tableau de fragments de chaîne. Si $string est vide, le résultat est un tableau vide ([]) à partir de PHP 8.2. Le dernier fragment peut être plus court que $length lorsque la longueur de la chaîne n'est pas un multiple exact de cette valeur.

Division en caractères individuels

Sans second argument, str_split() retourne un élément de tableau par caractère. C'est pratique pour parcourir chaque caractère ou compter les caractères par catégorie.

php— editable, runs on the server

Le résultat est un tableau où chaque caractère possède son propre index :

Array
(
    [0] => H
    [1] => e
    [2] => l
    [3] => l
    [4] => o
    [5] => ,
    [6] =>  
    [7] => W
    [8] => o
    [9] => r
    [10] => l
    [11] => d
    [12] => !
)

Division en fragments de longueur fixe

Passez un $length pour regrouper les caractères en fragments de cette taille. C'est utile pour formater des chaînes, par exemple découper un numéro de carte en groupes, ou traiter des données binaires en blocs fixes.

<?php
$string = "Hello, World!";
$chunks = str_split($string, 3);
print_r($chunks);
?>

La chaîne comporte 13 caractères, elle est donc divisée en quatre fragments de 3 plus un dernier fragment de 1 :

Array
(
    [0] => Hel
    [1] => lo,
    [2] =>  Wo
    [3] => rld
    [4] => !
)

Attention aux chaînes multioctets

str_split() opère sur des octets, pas sur des caractères. Pour le texte ASCII, un octet correspond à un caractère, donc le comportement par défaut ressemble à une division en caractères. Mais les caractères UTF-8 comme é ou les emojis occupent plusieurs octets, et str_split() les découpera, produisant des fragments invalides :

<?php
print_r(str_split("héllo"));
?>
Array
(
    [0] => h
    [1] => Ã
    [2] => ©
    [3] => l
    [4] => l
    [5] => o
)

Le é est sorti sous forme de deux octets corrompus. Lorsque vous devez diviser une chaîne UTF-8 par caractères réels, utilisez plutôt mb_str_split() — elle est compatible multioctets et conserve chaque caractère intact.

Quand utiliser str_split() plutôt que explode()

Utilisez str_split() lorsque vous souhaitez découper une chaîne à une position ou longueur fixe — chaque caractère individuellement, ou tous les N octets. Utilisez explode() lorsque vous souhaitez diviser sur un délimiteur tel qu'une virgule ou un espace. Pour reconstruire une chaîne à partir d'un tableau, consultez implode(), et pour diviser sur une expression régulière, consultez preg_split().

Pratique

Pratique
Que fait la fonction PHP 'str_split()' ?
Que fait la fonction PHP 'str_split()' ?
Was this page helpful?