Manuel PHP
Précédent |  | Suivant

# sprintf

(PHP 3, PHP 4 , PHP 5)

sprintf -- Retourne une chaîne formattée

## Description

string sprintf ( string format [, mixed args])

`sprintf` retourne une chaîne formatée, avec le format `format` et en utilisant les arguments `args`.

La chaîne de format est composée de zéro, une ou plusieurs directives : les caractères ordinaires (à l'exception de `%`) qui sont copiés directement dans le résultat, et des spécifications de conversion, qui exploitent chacune un des arguments passé après la chaîne de format. Ces formats s'appliquent à sprintf() et printf().

Chaque spécification de conversion est consistituée d'un signe de pourcentage (`%`), suivi d'un ou plusieurs des éléments suivants, dans cet ordre :

1. Un remplisseur optionnel qui indique quel caractère sera utilisé pour compléter le résultat jusqu'à la longueur requise. Ce peut être le caractère d'espace, ou le caractère `0`. Par défaut, le remplissage se fait avec des espaces. Un autre caractère de remplissage peut être spécifié en le préfixant avec un guillemet simple (`'`) : voir les exemples ci-dessous.

2. Un spécificateur d'alignement qui indique si le résultat doit être aligné à gauche ou à droite. Par défaut, le résultat est aligné à gauche. Le caractère `-` fera que le résultat est aligné à droite.

3. Un nombre optionnel, spécificateur de taille indique le nombre minimum de caractères que cette conversion doit fournir en résultat.

4. Un spécificateur de précision qui indique le nombre de décimales qui doivent être affichées pour les nombres à virgule flottante. Cette option n'a pas d'effet pour les autres types que float. Une autre fonction pratique pour formatter les nombres à virgule flottante est number_format().

5. Un spécificateur de type qui indique le type avec lequel l'argument sera traité. Plusieurs types possibles :

   `%` - un caractère de pourcentage litéral. Aucun argument n'est nécessaire.
   `b` - l'argument est traité comme un entier, et présenté comme un nombre binaire.
   `c` - l'argument est traité comme un entier, et présenté comme le caractère de code ASCII correspondant.
   `d` - l'argument est traité comme un entier, et présenté comme un nombre décimal signé.
   `u` - l'argument est traité comme un entier, et présenté comme un nombre décimal non signé.
   `f` - l'argument est traité comme un nombre à virgule flottante (type float), et présenté comme un nombre à virgule flottante.
   `o` - l'argument est traité comme un entier, et présenté comme un nombre octal.
   `s` - l'argument est traité et présenté comme une chaîne de caractères.
   `x` - l'argument est traité comme un entier, et présenté comme un nombre hexadécimal (les lettres en minuscules).
   `X` - l'argument est traité comme un entier, et présenté comme un nombre hexadécimal (les lettres en majuscules).

Depuis `PHP` 4.0.6, la chaîne de format supporte le numérotage et l'échange d'arguments. Par exemple :

Exemple 1. Echange d'arguments

`<?php $format = "Il y a %d singes dans le %s"; printf($format,$num,$location); ?>`

Ce exemple peut afficher par exemple : "Il y a 5 signes dans le bananier". Mais imaginez que la chaîne de format soit créée dans un script séparé (une librairie), ca nous devons internationaliser cet affichage. Nous aurons peut être à écrire :

Exemple 2. Echange d'arguments (2)

`<?php $format = "Le %s a %d singes"; printf($format,$num,$location); ?>`

Maintenant, nous avons un problème. L'ordre des arguments a été changé, et ne correspond pas à l'ordre des arguments dans le script `PHP`. Nous souhaitons laisser le code `PHP` tel quel, et simplement indiquer dans la chaîne de formattage l'ordre dans lequel les arguments doivent être repris. La chaîne de format peut être réécrite ainsi :

Exemple 3. Echange d'arguments (3)

`<?php $format = "Le %2\$s a %1\$d signes"; printf($format,$num,$location); ?>`

Un des avantages est que vous pouvez désormais exploiter plusieurs fois les arguments sans les répéter. Ainsi :

Exemple 4. Echange d'arguments (4)

`<?php $format = "Le %2\$s a %1\$d singes. C'est un beau %2\$s, avec %1\$d signes."; printf($format, $num, $location); ?>`

Voir aussi printf(), sscanf(), fscanf() et number_format().

## Exemples avec printf() et sprintf()

Exemple 5. sprintf(): entiers complétés de zéros

`<?php $isodate = sprintf("%04d-%02d-%02d", $year, $month, $day); ?>`

Exemple 6. sprintf(): format de monétaire

`<?php $money1 = 68.75; $money2 = 54.35; $money = $money1 + $money2; // echo $money va afficher "123.1"; $formatted = sprintf("%01.2f", $money); // echo $formatted va afficher "123.10" ?>`

Précédent | Sommaire | Suivant
soundex | Niveau supérieur | sscanf