W3docs

sscanf()

Notre article présente la fonction PHP sscanf(), utilisée pour analyser une entrée à partir d'une chaîne selon un format donné.

La fonction PHP sscanf() lit une chaîne et en extrait des valeurs selon un format que vous décrivez — c'est l'inverse de sprintf(). Là où sprintf() construit une chaîne formatée à partir de variables, sscanf() décompose une chaîne formatée en variables. Elle excelle lorsque vous disposez d'un texte de forme prévisible (dates, coordonnées, lignes de journal, codes d'identification) et souhaitez obtenir des éléments propres et typés sans écrire d'expression régulière.

Ce chapitre couvre la syntaxe, les deux façons de récupérer les résultats, les spécificateurs de format que vous utiliserez réellement, et les pièges courants.

Syntaxe

sscanf(string $string, string $format, mixed &...$vars): array|int|null
  • $string — le texte d'entrée à analyser.
  • $format — un modèle décrivant ce qu'il faut lire, à l'aide de spécificateurs % (la même famille que celle utilisée par printf).
  • &...$vars — des variables optionnelles, passées par référence, qui reçoivent les valeurs analysées.

Le comportement de sscanf() dépend de si vous passez ces variables supplémentaires :

Style d'appelValeur de retour
Seulement $string et $formatUn tableau des valeurs analysées
Avec des variables par référence après $formatUn int : le nombre de valeurs assignées avec succès

Retourner les valeurs sous forme de tableau

Si vous omettez les arguments par référence, sscanf() retourne tout sous forme de tableau. C'est le style le plus propre en PHP moderne et évite de passer des variables par référence.

php— editable, runs on the server

%s lit le prochain mot sans espace (John), et %d lit un entier (25, stocké comme un vrai int, et non la chaîne "25"). Le résultat est :

John
25

Assigner directement dans des variables

Passer des variables après le format les assigne directement. Dans ce mode, la valeur de retour est le nombre de champs qui ont correspondu, ce qui est utile pour valider les entrées.

<?php
$input = 'John 25';
$matched = sscanf($input, '%s %d', $name, $age);

echo $matched . "\n"; // 2  (both fields were read)
echo $name . "\n";    // John
echo $age;            // 25
?>

Remarque : en PHP 8, le préfixe & à l'appel (par ex. sscanf($s, $f, &$name)) a été supprimé. Passez simplement la variable brute — sscanf() déclare lui-même ces paramètres comme passés par référence.

Spécificateurs de format courants

SpécificateurLit
%sUne chaîne jusqu'au prochain espace
%dUn entier décimal signé
%fUn nombre à virgule flottante
%xUn entier hexadécimal
%cUn seul caractère
%%Un signe % littéral

Les caractères littéraux dans le format (espaces, barres obliques, deux-points) doivent également apparaître dans l'entrée. Cela rend sscanf() excellent pour des données de forme fixe comme les dates :

<?php
$date = '2026-06-21';
[$year, $month, $day] = sscanf($date, '%d-%d-%d');

printf("Year=%d Month=%d Day=%d", $year, $month, $day);
// Year=2026 Month=6 Day=21
?>

Quand utiliser sscanf() plutôt que les alternatives

  • Utilisez sscanf() lorsque le format est fixe et simple et que vous souhaitez des résultats typés en une ligne.
  • Utilisez explode() lorsque vous avez seulement besoin de diviser sur un délimiteur et de conserver tout sous forme de chaînes.
  • Utilisez preg_match() lorsque la structure est irrégulière ou nécessite des règles de validation allant au-delà des types de champs simples.
  • Pour l'opération inverse — assembler une chaîne formatée — utilisez sprintf() ou printf().

Pour lire une entrée formatée directement depuis un fichier plutôt que depuis une chaîne, voir fscanf(), qui fonctionne de la même façon ligne par ligne.

Pièges courants

  • %s s'arrête aux espaces. Il ne capturera pas une valeur composée de plusieurs mots. Pour lire le reste d'une ligne, utilisez un ensemble de scan comme %[^\n].
  • Un champ non correspondant interrompt le reste. Si %d est attendu mais que l'entrée contient des lettres, l'analyse s'arrête ; la valeur de retour de comptage vous permet de détecter cela.
  • Les variables non correspondantes restantes deviennent null. Vérifiez toujours le comptage retourné avant de faire confiance aux variables suivantes.

Pratique

Pratique
À quoi sert la fonction sscanf() en PHP ?
À quoi sert la fonction sscanf() en PHP ?
Was this page helpful?