logo oujood
🔍

PHP str_getcsv() : analyser une chaîne CSV en tableau

str_getcsv() fait ce que fgetcsv() fait sur un fichier, mais sur une chaîne de caractères. Pratique pour traiter des données CSV reçues via une API ou un formulaire.

OUJOOD.COM

Disponible depuis PHP 5.3.0, str_getcsv() analyse une chaîne de caractères au format CSV et retourne un tableau contenant les champs extraits. Elle fonctionne comme fgetcsv(), à la différence qu'elle prend une chaîne en entrée plutôt qu'un pointeur de fichier — ce qui la rend idéale pour traiter des données CSV reçues via une API, un formulaire ou stockées en base de données.

Syntaxe

str_getcsv( string $input, string $delimiter = ',', string $enclosure = '"', string $escape = '\\' )

Paramètres

Paramètre Description
$input La chaîne CSV à analyser. Obligatoire.
$delimiter Le caractère séparant les champs. Par défaut la virgule ,. Doit être un seul caractère.
$enclosure Le caractère qui entoure les champs contenant des caractères spéciaux (espaces, délimiteurs...). Par défaut le guillemet double ".
$escape Le caractère d'échappement pour protéger les guillemets à l'intérieur d'un champ. Par défaut l'antislash \.

Exemples

Exemple 1 : usage de base

On passe directement une ligne CSV sous forme de chaîne. La fonction retourne un tableau indexé contenant chaque champ.

  📋 Copier le code

<?php
$ligne = "Jean,Dupont,jean.dupont@example.com,35";

$champs = str_getcsv($ligne);

print_r($champs);
/*
Array
(
    [0] => Jean
    [1] => Dupont
    [2] => jean.dupont@example.com
    [3] => 35
)
*/
?>

Exemple 2 : délimiteur personnalisé

Quand les champs sont séparés par un point-virgule (format courant en Europe), on passe ; comme deuxième argument.

  📋 Copier le code

<?php
$ligne = "Jean;Dupont;jean.dupont@example.com;35";

// Point-virgule comme délimiteur
$champs = str_getcsv($ligne, ';');

print_r($champs);
?>

Exemple 3 : traiter un bloc CSV multi-lignes

str_getcsv() traite une ligne à la fois. Pour un fichier ou une chaîne multi-lignes, on découpe d'abord par retour à la ligne avec explode(), puis on applique str_getcsv() à chaque ligne.

  📋 Copier le code

<?php
$csv = "Jean,Dupont,35\nAmal,Sami,28\nPierre,Jolie,42";

// Découper le bloc en lignes, puis analyser chacune
$lignes = explode("\n", $csv);

foreach ($lignes as $ligne) {
    $champs = str_getcsv($ligne);
    echo "Prénom : {$champs[0]}, Nom : {$champs[1]}, Âge : {$champs[2]}\n";
}
/*
Prénom : Jean, Nom : Dupont, Âge : 35
Prénom : Amal, Nom : Sami, Âge : 28
Prénom : Pierre, Nom : Jolie, Âge : 42
*/
?>

Par carabde | Mis à jour le 16 mai 2026