Dans cet article
- La fonction explode() découpe une chaîne en tableau selon un délimiteur précis
- Le paramètre limit permet de contrôler le nombre d’éléments retournés
- Associée à implode(), elle forme le duo incontournable de manipulation de chaînes en PHP
- Elle traite efficacement les fichiers CSV, les URL et les données de formulaires en quelques lignes de code
- Depuis PHP 8.0, passer un délimiteur vide déclenche une ValueError au lieu d’un simple warning
- Pour les séparateurs multiples, preg_split() reste l’alternative recommandée
Sommaire
- Définition et syntaxe de la fonction explode en PHP
- Les trois paramètres d’explode() en détail
- Cas d’utilisation concrets d’explode PHP
- Explode et implode : le duo indispensable
- Gérer les séparateurs multiples
- Erreurs fréquentes et bonnes pratiques
- Fonctions complémentaires à connaître
- Performances et limites d’explode()
- Tableau comparatif : explode vs alternatives
En douze ans de développement web, je peux affirmer que php explode fait partie des fonctions que j’utilise quotidiennement. Que ce soit pour parser un fichier CSV, extraire des segments d’URL ou découper les données d’un formulaire, cette fonction native de PHP reste un outil fondamental dans la boîte à outils de tout développeur. Dans ce guide, je vous propose un tour complet de la fonction explode php, de sa syntaxe jusqu’aux pièges à éviter, avec des exemples issus de projets réels.
Définition et syntaxe de la fonction explode en PHP
La fonction explode() en PHP découpe une chaîne de caractères (string) en un tableau (array) à partir d’un délimiteur que vous définissez. C’est l’équivalent PHP de la méthode split() que l’on retrouve en JavaScript ou en Python.
Voici la signature officielle, telle que documentée dans la documentation officielle PHP sur php.net :
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
Un exemple simple pour poser les bases :
<?php
$phrase = "WordPress;Joomla;Drupal;PrestaShop";
$cms = explode(";", $phrase);
print_r($cms);
// Array ( [0] => WordPress [1] => Joomla [2] => Drupal [3] => PrestaShop )
?>
Ici, le point-virgule sert de délimiteur. La fonction retourne un tableau indexé numériquement, chaque élément correspondant à un segment de la chaîne originale. C’est aussi simple que cela, et c’est précisément cette simplicité qui rend explode() si populaire dans les projets PHP, des petits scripts aux applications WordPress complexes.

Les trois paramètres d’explode() en détail
La puissance d’explode() réside dans ses trois paramètres. Voyons chacun en profondeur.
Le paramètre separator (obligatoire)
C’est la chaîne qui sert de point de découpe. Elle peut être un caractère unique (,, ;, |) ou une chaîne plus longue (", ", "&", "---"). J’utilise très souvent la virgule pour les listes et le pipe pour les données structurées dans mes projets clients.
<?php
// Délimiteur multi-caractères
$data = "pomme---poire---cerise";
$fruits = explode("---", $data);
// ["pomme", "poire", "cerise"]
?>
Attention critique : le délimiteur ne peut pas être une chaîne vide. Depuis PHP 8.0, passer "" déclenche une ValueError. Sur les versions antérieures, cela retournait false avec un warning. C’est un piège classique que je rencontre régulièrement en audit de code.
Le paramètre string (obligatoire)
C’est la chaîne à découper. Si la chaîne ne contient pas le délimiteur, explode() retourne un tableau avec un seul élément contenant la chaîne complète. Ce comportement est important à comprendre pour éviter des bugs subtils :
<?php
$resultat = explode(",", "texte_sans_virgule");
// Array ( [0] => texte_sans_virgule )
count($resultat); // 1
?>
Le paramètre limit (optionnel)
Ce troisième paramètre contrôle le nombre maximum d’éléments dans le tableau retourné. Son comportement varie selon que la valeur est positive, négative ou nulle :
<?php
$chemin = "var/www/html/wp-content/themes/flavor";
// Limit positif : 3 éléments maximum
$parts = explode("/", $chemin, 3);
// ["var", "www", "html/wp-content/themes/flavor"]
// Limit négatif : supprime les N derniers éléments
$parts = explode("/", $chemin, -2);
// ["var", "www", "html", "wp-content"]
// Limit = 1 : retourne la chaîne intacte dans un tableau
$parts = explode("/", $chemin, 1);
// ["var/www/html/wp-content/themes/flavor"]
?>
Le limit négatif est particulièrement utile quand je travaille sur des chemins de fichiers dans WordPress. Il me permet d’ignorer les derniers segments sans avoir à compter manuellement le nombre total d’éléments. C’est une fonctionnalité que beaucoup de développeurs ignorent, comme certaines subtilités du PHP switch que j’abordais dans un précédent article.
Cas d’utilisation concrets d’explode PHP
Après des années de développement, voici les situations où j’utilise le plus explode() au quotidien.
Traitement de fichiers CSV
C’est probablement le cas d’usage le plus classique. Quand je dois importer un catalogue produit ou une liste de contacts pour un client, explode() entre en jeu :
<?php
$ligne_csv = "Martin,Jean,[email protected],0612345678";
$champs = explode(",", $ligne_csv);
$nom = $champs[0]; // Martin
$prenom = $champs[1]; // Jean
$email = $champs[2]; // [email protected]
$tel = $champs[3]; // 0612345678
?>
Pour un vrai fichier CSV en production, je recommande fgetcsv() qui gère les guillemets et les échappements. Mais pour des données simples sans caractères spéciaux, explode() fait le travail proprement.
Extraction de segments d’URL
<?php
$url = "https://na-web.fr/blog/php/tutoriel-explode";
$segments = explode("/", $url);
// ["https:", "", "na-web.fr", "blog", "php", "tutoriel-explode"]
$domaine = $segments[2]; // na-web.fr
$dernier = end($segments); // tutoriel-explode
?>
Découpage par retour à la ligne
Quand je récupère le contenu d’un fichier texte ou une réponse API multi-lignes, le découpage par saut de ligne est incontournable :
<?php
$texte = "Ligne 1\nLigne 2\nLigne 3";
$lignes = explode("\n", $texte);
// ["Ligne 1", "Ligne 2", "Ligne 3"]
?>
Sur des projets WordPress, je combine souvent cette technique avec array_filter() pour supprimer les lignes vides. Si vous travaillez avec du PHP natif, ces fonctions de tableau deviennent vos meilleures alliées.
Traitement de query strings
<?php
$query = "nom=Morel&ville=SaintEtienne&metier=dev";
$paires = explode("&", $query);
foreach ($paires as $paire) {
list($cle, $valeur) = explode("=", $paire, 2);
echo "$cle : $valeur\n";
}
// nom : Morel
// ville : SaintEtienne
// metier : dev
?>
Notez le limit à 2 dans le second explode() : cela empêche un bug si la valeur elle-même contient un signe égal. C’est le genre de détail qui fait la différence entre du code fonctionnel et du code robuste.

Explode et implode : le duo indispensable
On ne peut pas parler d’explode() sans évoquer sa fonction miroir : implode(). Si explode() transforme une chaîne en tableau, PHP implode fait l’opération inverse en assemblant les éléments d’un tableau en une seule chaîne.
<?php
// Explode : chaîne → tableau
$tags_string = "php,wordpress,mysql,css";
$tags_array = explode(",", $tags_string);
// ["php", "wordpress", "mysql", "css"]
// Implode : tableau → chaîne
$resultat = implode(" | ", $tags_array);
// "php | wordpress | mysql | css"
?>
Ce duo est omniprésent dans mes projets. Un cas concret : quand un client WordPress utilise un champ ACF de type texte pour stocker des tags séparés par des virgules. Je fais un explode() pour les manipuler individuellement (nettoyage, validation), puis un implode() pour les réassembler avant sauvegarde.
<?php
function nettoyer_tags($tags_bruts) {
$tags = explode(",", $tags_bruts);
$tags = array_map('trim', $tags);
$tags = array_map('strtolower', $tags);
$tags = array_unique($tags);
$tags = array_filter($tags);
return implode(",", $tags);
}
echo nettoyer_tags(" PHP , WordPress, php , MySQL , ");
// "php,wordpress,mysql"
?>
Cette fonction combine explode() avec trim, strtolower, array_unique et array_filter. C’est un pattern que je réutilise constamment. La fonction PHP trim supprime les espaces superflus que les utilisateurs ajoutent souvent par inadvertance dans les formulaires.
Gérer les séparateurs multiples
Une limitation connue d’explode() est qu’elle n’accepte qu’un seul délimiteur. Quand on doit découper une chaîne selon plusieurs séparateurs, il faut passer par d’autres approches. C’est une question que l’on retrouve fréquemment sur les forums et dans les recherches sur PHP explode multiple separators.
Méthode 1 : preg_split() avec expression régulière
<?php
$texte = "mot1,mot2;mot3|mot4 mot5";
$mots = preg_split('/[,;|\s]+/', $texte);
// ["mot1", "mot2", "mot3", "mot4", "mot5"]
?>
Le + après la classe de caractères gère les séparateurs consécutifs. C’est la méthode que je recommande pour les cas complexes.
Méthode 2 : str_replace puis explode
<?php
$texte = "mot1,mot2;mot3|mot4";
$normalise = str_replace([";", "|"], ",", $texte);
$mots = explode(",", $normalise);
// ["mot1", "mot2", "mot3", "mot4"]
?>
Cette approche est plus lisible et légèrement plus rapide pour des cas simples. Je l’utilise quand le nombre de délimiteurs alternatifs est connu et limité. On retrouve cette logique de branchement conditionnel dans beaucoup de structures PHP, comme je l’explique dans mon article sur le PHP case statement.
Méthode 3 : strtok() pour un découpage itératif
<?php
$texte = "mot1,mot2;mot3|mot4";
$token = strtok($texte, ",;|");
while ($token !== false) {
echo $token . "\n";
$token = strtok(",;|");
}
?>
La fonction strtok() accepte nativement plusieurs délimiteurs. Elle consomme moins de mémoire car elle ne crée pas de tableau intermédiaire, ce qui peut être pertinent pour le traitement de très gros fichiers.
Erreurs fréquentes et bonnes pratiques
En audits de code, je retrouve régulièrement les mêmes erreurs liées à explode(). Voici comment les éviter.
Erreur n°1 : délimiteur vide
<?php
// ❌ ERREUR : ValueError en PHP 8+
$chars = explode("", "Bonjour");
// ✅ CORRECT : utiliser str_split() pour découper caractère par caractère
$chars = str_split("Bonjour");
// ["B", "o", "n", "j", "o", "u", "r"]
?>
Erreur n°2 : ne pas vérifier le résultat avant d’accéder aux index
<?php
// ❌ RISQUÉ : si le format n'est pas respecté
$date = explode("-", $input);
$annee = $date[0];
$mois = $date[1]; // Undefined offset si pas de tiret
// ✅ SÉCURISÉ : vérifier le nombre d'éléments
$date = explode("-", $input);
if (count($date) === 3) {
[$annee, $mois, $jour] = $date;
} else {
// Gérer le format invalide
}
?>
Erreur n°3 : confondre explode() et split()
La fonction split() a été supprimée depuis PHP 7.0. Si vous maintenez du code legacy, remplacez chaque appel à split() par explode() (pour un délimiteur fixe) ou preg_split() (pour une regex).
Erreur n°4 : ignorer les espaces résiduels
<?php
// La chaîne contient des espaces après les virgules
$liste = "rouge, vert, bleu, jaune";
$couleurs = explode(",", $liste);
// ["rouge", " vert", " bleu", " jaune"] ← espaces indésirables
// ✅ Nettoyage avec array_map et trim
$couleurs = array_map('trim', explode(",", $liste));
// ["rouge", "vert", "bleu", "jaune"]
?>
Ce pattern array_map('trim', explode(...)) est devenu un réflexe chez moi. Je le recommande systématiquement dès que les données proviennent de saisies utilisateur. C’est le même type de nettoyage que celui décrit dans mon guide sur le download en PHP, où la validation des entrées est primordiale.

Fonctions complémentaires à connaître
La fonction explode() s’inscrit dans un écosystème riche de fonctions de manipulation de chaînes. Voici celles que j’utilise le plus en complément.
str_split() : découpage par longueur fixe
<?php
$code = "ABCD1234EFGH";
$blocs = str_split($code, 4);
// ["ABCD", "1234", "EFGH"]
?>
Contrairement à explode() qui découpe selon un délimiteur, str_split() découpe selon une longueur fixe. Idéal pour formater des numéros de carte, des codes produit ou des identifiants.
substr() : extraction par position
La fonction substr PHP extrait une portion de chaîne selon sa position et sa longueur. Elle complète explode() quand le découpage n’est pas basé sur un délimiteur mais sur des positions connues :
<?php
$code_postal = "42000";
$departement = substr($code_postal, 0, 2); // "42"
?>
Combinaison explode + foreach
Le couple explode() et for PHP (ou plus précisément foreach) forme un pattern essentiel pour traiter chaque élément individuellement. C’est la boucle foreach qui permet d’itérer sur le tableau produit par explode() :
<?php
$permissions = "read,write,execute,admin";
foreach (explode(",", $permissions) as $permission) {
if ($permission === 'admin') {
echo "Accès administrateur détecté !\n";
}
}
?>
On retrouve cette combinaison dans de nombreuses situations, notamment quand on parse des chaînes de configuration. Ce mécanisme de branchement conditionnel s’apparente à ce que l’on fait avec un PHP switch imbriqué pour des logiques plus complexes.
list() ou déstructuration avec explode()
Depuis PHP 7.1, la déstructuration de tableau rend le code plus élégant :
<?php
// PHP 7.1+
[$prenom, $nom, $email] = explode("|", "Nathan|Morel|[email protected]");
echo $prenom; // Nathan
echo $nom; // Morel
echo $email; // [email protected]
?>
C’est ma syntaxe préférée quand je connais exactement le nombre de segments attendus. Elle rend le code beaucoup plus lisible qu’un accès par index numérique.
Performances et limites d’explode()
La fonction explode() est implémentée en C dans le moteur Zend, ce qui la rend extrêmement rapide pour la majorité des usages. Voici quelques repères issus de mes benchmarks personnels sur PHP 8.3 :
- Découpage d’une chaîne de 1 000 caractères avec 50 segments : ~3 microsecondes
- Découpage d’une chaîne de 100 000 caractères avec 5 000 segments : ~200 microsecondes
explode()est en moyenne 2 à 5 fois plus rapide quepreg_split()sur un délimiteur fixe
Les limites à garder en tête :
- Mémoire : le tableau résultant occupe plus de mémoire que la chaîne originale (chaque élément est une nouvelle chaîne PHP avec son overhead). Sur un fichier de 500 Mo, privilégiez
strtok()ou une lecture ligne par ligne. - Un seul délimiteur : contrairement à
strtok()oupreg_split(), on ne peut pas spécifier plusieurs caractères comme délimiteurs distincts. - Pas de regex : le délimiteur est toujours littéral. Pour des patterns de découpage complexes, utilisez
preg_split().
En pratique, pour des données web classiques (formulaires, API, fichiers de configuration), explode() est toujours le bon choix. Je ne bascule sur preg_split() que lorsque le délimiteur varie, conformément aux recommandations de la documentation PHP officielle sur preg_split.
Tableau comparatif : explode vs alternatives
Pour vous aider à choisir la bonne fonction selon votre besoin, voici un récapitulatif complet.
| Fonction | Délimiteur | Retour | Multi-séparateurs | Performance | Usage recommandé |
|---|---|---|---|---|---|
| explode() | Chaîne fixe | Array | Non | Très rapide | Découpage standard par délimiteur unique |
| preg_split() | Regex | Array | Oui | Rapide | Délimiteurs multiples ou patterns complexes |
| str_split() | Longueur fixe | Array | Non applicable | Très rapide | Découpage par nombre de caractères |
| strtok() | Caractères multiples | String (itératif) | Oui | Très rapide | Gros volumes, consommation mémoire réduite |
| sscanf() | Format pattern | Array ou vars | Via pattern | Rapide | Extraction typée de données formatées |
| substr() | Position | String | Non applicable | Très rapide | Extraction par position connue |
Dans la grande majorité des cas, explode() est le premier choix. Les alternatives n’entrent en jeu que pour des besoins spécifiques : regex pour preg_split(), longueur fixe pour str_split(), économie mémoire pour strtok(). Si vous manipulez aussi des devises dans vos projets PHP, mon article sur la conversion PHP euro aborde d’autres fonctions utiles de formatage.
À retenir
- Utilisez
array_map('trim', explode(...))systématiquement sur les données utilisateur - Définissez toujours un limit à 2 quand vous découpez des paires clé=valeur
- Vérifiez le count() du résultat avant d’accéder aux index du tableau
- Préférez preg_split() uniquement quand vous avez plusieurs délimiteurs différents
- Combinez explode() et implode() pour nettoyer et reformater les chaînes en une seule passe
Questions fréquentes
What is explode() in PHP ?
La fonction explode() est une fonction native de PHP qui découpe une chaîne de caractères en un tableau (array) en se basant sur un délimiteur que vous définissez. Par exemple, explode(",", "a,b,c") retourne le tableau ["a", "b", "c"]. Elle est disponible depuis PHP 4 et reste l’une des fonctions les plus utilisées du langage pour le traitement de texte.
Why use explode in PHP ?
On utilise explode() en PHP principalement pour transformer des données textuelles en tableaux exploitables. Les cas les plus courants incluent le parsing de fichiers CSV, l’extraction de segments d’URL, le traitement de paramètres de requête et la manipulation de listes stockées sous forme de chaînes en base de données. Sa simplicité d’utilisation et ses performances en font le premier choix avant toute solution regex.
When should I use explode in PHP ?
Utilisez explode() quand vous devez découper une chaîne selon un délimiteur unique et fixe (virgule, point-virgule, pipe, espace, etc.). Si votre délimiteur varie ou suit un pattern complexe, tournez-vous vers preg_split(). Si vous devez découper par longueur fixe de caractères, utilisez plutôt str_split(). En résumé : un délimiteur simple et connu à l’avance = explode().
What does explode() do ?
Concrètement, explode() parcourt la chaîne passée en second paramètre, identifie chaque occurrence du délimiteur (premier paramètre), et retourne un tableau contenant les segments situés entre ces occurrences. Le troisième paramètre optionnel limit permet de contrôler le nombre maximum d’éléments retournés. Si le délimiteur n’est pas trouvé, la fonction retourne un tableau contenant la chaîne originale comme unique élément.
Quelle est la différence entre explode() et implode() en PHP ?
Ce sont deux fonctions inverses. explode() transforme une chaîne en tableau en la découpant selon un délimiteur. implode() (aussi appelée join()) assemble les éléments d’un tableau en une seule chaîne en insérant un séparateur entre chaque élément. En pratique, on les utilise souvent ensemble : explode() pour décomposer, traiter élément par élément, puis implode() pour reconstruire la chaîne modifiée.
Comment découper une chaîne PHP avec plusieurs séparateurs ?
La fonction explode() n’accepte qu’un seul délimiteur. Pour gérer plusieurs séparateurs, trois options s’offrent à vous : preg_split('/[,;|\s]+/', $chaine) avec une expression régulière, la combinaison str_replace() puis explode() pour normaliser les séparateurs, ou encore strtok() qui accepte nativement une chaîne de caractères délimiteurs multiples.
Nathan Morel est développeur web freelance depuis 12 ans dans la Loire. Spécialisé WordPress et solutions sur mesure, il a accompagné plus de 200 PME et partage son expérience technique et entrepreneuriale sur NA Web.