PHP 8.3.4 Released!

printf

(PHP 4, PHP 5, PHP 7, PHP 8)

printfAffiche une chaîne de caractères formatée

Description

printf(string $format, mixed ...$values): int

Affiche une chaîne de caractères formatée.

Liste de paramètres

format

La chaîne de format est composé de zéro ou plusieurs directives : des caractères ordinaires (à l'exception de %) qui sont copiés directement dans le résultat et des spécifications de conversion, chacun ayant pour résultat de récupérer ses propres paramètre.

Une spécification de conversion qui suit ce prototype : %[argnum$][flags][width][.precision]specifier.

Argnum

Un entier suivit d'un signe dollar $, pour spécifier quel numéro d'argument à traiter dans la conversion.

Drapeaux
Drapeau Description
- Justifie le texte à gauche donnée la largeur du champ ; Justification à droite est le comportement par défaut.
+ Préfixe les nombres positives avec un signe plus + ; Par défaut seul les nombres négatifs sont préfixés avec un signe négatif.
(espace) Complète le résultat avec des espaces. Ceci est par défaut.
0 Complète uniquement les nombres à gauches avec des zéros. Avec le spécificateur s ceci peut aussi compléter à droite avec des zéros.
'(char) Complète le résultat avec le caractère (char).

Largeur

Soit un entier indiquant le nombre de caractères (minimum) que cette conversion doit produire, soit *. Si * est utilisé, alors la largeur est fournie en tant que valeur entière supplémentaire précédant celle formatée par le spécificateur.

Precision

Un point . suivi optionnellement soit d'un entier, soit de *, dont la signification dépend du spécificateur :

  • Pour les spécificateurs e, E, f et F : ceci est le nombre de chiffres à afficher après la virgule (par défaut, ceci est 6).
  • Pour les spécificateurs g, G, h et H : ceci est le nombre maximal de chiffres significatifs à afficher. digits to be printed.
  • Pour le spécificateur s : il agit comme un point de coupure, définissant une limite maximale de caractères de la chaîne.

Note: Si le point est spécifié sans une valeur explicite pour la précision, 0 est assumé. Si * est utilisé, la précision est fournie en tant que valeur entière supplémentaire précédant celle formatée par le spécificateur.

Spécificateurs
Spécificateur Description
% Un caractère de pourcentage litté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 entier décimal (signé).
e L'argument est traité comme une notation scientifique (e.g. 1.2e+2).
E Comme le spécificateur e mais utilise une lettre majuscule (par exemple 1.2E+2).
f L'argument est traité comme un nombre à virgule flottante (type nombre décimal) et présenté comme un nombre à virgule flottante (tenant compte de la locale utilisée).
F L'argument est traité comme un nombre à virgule flottante (type nombre décimal) et présenté comme un nombre à virgule flottante (ne tenant pas compte de la locale utilisée).
g

Format général.

Soit P égal à la précision si différent de 0, 6 si la précision est omit ou 1 si la précision est zéro. Alors, si la conversion avec le style E aurait comme exposant X :

Si P > X ≥ −4, la conversion est avec style f et précision P − (X + 1). Sinon, la conversion est avec le style e et précision P - 1.

G Comme le spécificateur g mais utilise E et f.
h Comme le spécificateur g mais utilise F. Disponible à partir de PHP 8.0.0.
H Comme le spécificateur g mais utilise E et F. Disponible à partir de PHP 8.0.0.
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.
u L'argument est traité comme un entier et présenté comme un nombre décimal non signé.
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).

Avertissement

Le spécificateur de type c ignore l'alignement et la taille.

Avertissement

Le fait de tenter d'utiliser une combinaison d'une chaîne et de spécificateurs avec des jeux de caractères qui nécessitent plus d'un octet par caractères donnera un résultat inattendu.

Les variables seront contraints à un type approprié pour le spécificateur :

Gestion des types
Type Spécificateurs
string s
int d, u, c, o, x, X, b
float e, E, f, F, g, G, h, H

values

Valeurs de retour

Retourne la taille de la chaîne affichée.

Erreurs / Exceptions

À partir de PHP 8.0.0, une ValueError est lancée si le nombre d'arguments est nul. Antérieur à PHP 8.0.0, un E_WARNING était émis à la place.

À partir de PHP 8.0.0, une ValueError est lancée si [width] est inférieur à zéro ou supérieur à PHP_INT_MAX. Antérieur à PHP 8.0.0, un E_WARNING était émis à la place.

À partir de PHP 8.0.0, une ValueError est lancée si [precision] est inférieur à zéro ou supérieur à PHP_INT_MAX. Antérieur à PHP 8.0.0, un E_WARNING était émis à la place.

À partir de PHP 8.0.0, une ArgumentCountError est lancée lorsque moins d'arguments sont donnés que requis. Antérieur à PHP 8.0.0, false était retourné et un E_WARNING était émis à la place.

Historique

Version Description
8.0.0 Cette fonction ne renvoie plus false en cas d'échec.
8.0.0 Lance une ValueError si le nombre d'arguments est zéro ; auparavant, cette fonction émettait un E_WARNING.
8.0.0 Lance une ValueError si [width] est inférieur à zéro ou supérieur à PHP_INT_MAX ; auparavant, cette fonction émettait un E_WARNING.
8.0.0 Lance une ValueError si [precision] est inférieur à zéro ou supérieur à PHP_INT_MAX ; auparavant, cette fonction émettait un E_WARNING.
8.0.0 Lance une ArgumentCountError lorsque moins d'arguments sont donnés que requis ; auparavant, cette fonction émettait un E_WARNING.

Exemples

Exemple #1 printf() : divers exemples

<?php
$n
= 43951789;
$u = -43951789;
$c = 65; // ASCII 65 is 'A'

// notez le double %%, cela affiche un caractère '%' littéral
printf("%%b = '%b'\n", $n); // représentation binaire
printf("%%c = '%c'\n", $c); // affiche le caractère ascii, comme la fonction chr()
printf("%%d = '%d'\n", $n); // représentation standard d'un entier
printf("%%e = '%e'\n", $n); // notation scientifique
printf("%%u = '%u'\n", $n); // représentation entière non signée d'un entier positif
printf("%%u = '%u'\n", $u); // représentation entière non signée d'un entier négatif
printf("%%f = '%f'\n", $n); // représentation en virgule flottante
printf("%%o = '%o'\n", $n); // représentation octale
printf("%%s = '%s'\n", $n); // représentation chaîne de caractères
printf("%%x = '%x'\n", $n); // représentation hexadécimal (minuscule)
printf("%%X = '%X'\n", $n); // représentation hexadécimal (majuscule)

printf("%%+d = '%+d'\n", $n); // indication du signe pour un entier positif
printf("%%+d = '%+d'\n", $u); // indication du signe pour un entier négatif
?>

L'exemple ci-dessus va afficher :

%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'

Exemple #2 printf() : spécificateurs chaînes de caractères

<?php
$s
= 'monkey';
$t = 'many monkeys';

printf("[%s]\n", $s); // affichage d'une chaîne standard
printf("[%10s]\n", $s); // justification à droite avec des espaces
printf("[%-10s]\n", $s); // justification à gauche avec des espaces
printf("[%010s]\n", $s); // l'espacement nul fonctionne aussi sur les chaînes
printf("[%'#10s]\n", $s); // utilisation du caractère personnalisé de séparation '#'
printf("[%'#*s]\n", 10, $s); // Fournir la largeur de la justification comme argument supplémentaire
printf("[%10.9s]\n", $t); // justification à droite mais avec une coupure à 8 caractères
printf("[%-10.9s]\n", $t); // justification à gauche mais avec une coupure à 8 caractères
?>

L'exemple ci-dessus va afficher :

[monkey]
[    monkey]
[monkey    ]
[0000monkey]
[####monkey]
[####monkey]
[ many monk]
[many monk ]

Voir aussi

  • print - Affiche une chaîne de caractères
  • sprintf() - Retourne une chaîne formatée
  • fprintf() - Écrit une chaîne formatée dans un flux
  • vprintf() - Affiche une chaîne formatée
  • vsprintf() - Retourne une chaîne formatée
  • vfprintf() - Écrit une chaîne formatée dans un flux
  • sscanf() - Analyse une chaîne à l'aide d'un format
  • fscanf() - Analyse un fichier en fonction d'un format
  • number_format() - Formate un nombre pour l'affichage
  • date() - Formate un horodatage Unix
  • flush() - Vide les tampons de sortie du système

add a note

User Contributed Notes 17 notes

up
19
dhosek at excite dot com
24 years ago
Be careful:
printf ("(9.95 * 100) = %d \n", (9.95 * 100));

'994'

First %d converts a float to an int by truncation.

Second floats are notorious for tiny little rounding errors.
up
4
php at mole dot gnubb dot net
18 years ago
[Editor's Note: Or just use vprintf...]

If you want to do something like <?php printf('There is a difference between %s and %s', array('good', 'evil')); ?> (this doesn't work) instead of <?php printf('There is a difference between %s and %s', 'good', 'evil'); ?> you can use this function:

<?php
function printf_array($format, $arr)
{
return
call_user_func_array('printf', array_merge((array)$format, $arr));
}
?>

Use it the following way:
<?php
$goodevil
= array('good', 'evil');
printf_array('There is a difference between %s and %s', $goodevil);
?>
and it will print:
There is a difference between good and evil
up
0
Mario M. Junior
1 year ago
To provide a more user-friendly interface, you can use colors when printing text in the terminal.

p('Ordinary text.');
p('Warning: Check this out...', 'info');
p('Ops! Something went wrong.', 'error');
p('Yeah... done!', 'success');

function p($text, $style = '', $newLine = true) {

$styles = array(
'success' => "\033[0;32m%s\033[0m",
'error' => "\033[31;31m%s\033[0m",
'info' => "\033[33;33m%s\033[0m",

'Black' => "\033[0;30m%s\033[0m",
'Red' => "\033[0;31m%s\033[0m",
'Green' => "\033[0;32m%s\033[0m",
'Yellow' => "\033[0;33m%s\033[0m",
'Blue' => "\033[0;34m%s\033[0m",
'Purple' => "\033[0;35m%s\033[0m",
'Cyan' => "\033[0;36m%s\033[0m",
'Gray' => "\033[0;37m%s\033[0m",
'Graphite' => "\033[1;30m%s\033[0m",

'Bold Red' => "\033[1;31m%s\033[0m",
'Bold Green' => "\033[1;32m%s\033[0m",
'Bold Yellow' => "\033[1;33m%s\033[0m",
'Bold Blue' => "\033[1;34m%s\033[0m",
'Bold Purple' => "\033[1;35m%s\033[0m",
'Bold Cyan' => "\033[1;36m%s\033[0m",
'Bold White' => "\033[1;37m%s\033[0m",

'Bg Black' => "\033[40;1;37m%s\033[0m",
'Bg Red' => "\033[41;1;37m%s\033[0m",
'Bg Green' => "\033[42;1;37m%s\033[0m",
'Bg Yellow' => "\033[43;1;37m%s\033[0m",
'Bg Blue' => "\033[44;1;37m%s\033[0m",
'Bg Purple' => "\033[45;1;37m%s\033[0m",
'Bg Cyan' => "\033[46;1;37m%s\033[0m",
'Bg Gray' => "\033[47;1;37m%s\033[0m",

'Underscore' => "\033[4;37m%s\033[0m",
'Inverted' => "\033[7;37m%s\033[0m",
'Blink' => "\033[5;37m%s\033[0m",
);

$format = '%s';

if (isset($styles[$style])) {
$format = $styles[$style];
}

if ($newLine) {
$format .= PHP_EOL;
}

printf($format, $text);
}
up
-1
deekayen at hotmail dot com
22 years ago
You can use this function to format the decimal places in a number:

$num = 2.12;
printf("%.1f",$num);

prints:

2.1

see also: number_format()
up
-2
maybird99 at yahoo dot com
22 years ago
instead of writing a function to round off a float (let's call it 'x') accurately, it's much easier to add a small number to x and then truncate it...
For example: if you want to round off to the nearest integer, just add 0.5 to x and then truncate it. if x=12.6, then it would calculate 13.1, and truncate it to 13. If x=14.4, it would calculate 14.9 and truncate it to 14.
up
-5
steve at myschoolsystems dot com
2 years ago
To format a dollar value as in $123.00 that may otherwise look like $123 use this

print ('$'); // the dollar sign in front of our answer
printf ('%.2f',$price);
up
-14
spiffytech at gmail dot com
12 years ago
Be careful when relying on typecasting with printf(). For example,

printf("%d", "17,999")

returns "17".
up
-10
shepard at ameth dot org
22 years ago
Be sure that the output channel is available to write on before executing printf()! Some functions in classes available from various sources (in my case, DB_Sql::query() in PHPLIB) assume that printing will work, even after the default output stream has been closed.

For me the issue was most notable in PHP4 session management when I was creating my own sess_write() handler. Since I was unable to find any function that checks for the output stream that printf() uses, I just had to drop the crazy use of the printf(). (does some function already exist to check for the presence of an output stream?)
up
-12
eugenew at starhub dot net dot sg
21 years ago
If anyone is looking for writing a quine using printf(),
this is my example:

<?php $f='<?php $f=%c%s%c; printf($f,39,$f,39); ?>'; printf($f,39,$f,39); ?>

This also helps those who are new to printf() see one way of using the 'mixed args' part, rather than just a single argument as in most examples I've seen.
up
-13
RS
7 years ago
If your missing features such as "-"*100 to print a single character multiple times you can use the slightly longer and less readable PHP equivalent printf("%'-100s",""); and sprint("%'-100s","").
up
-16
ezislis at mail dot ru
22 years ago
be careful with integers, they cant hold large values.

printf("%d",10023123553.45634663);
will print out: 1433188961
and
printf("%.0f",10023123553.45634663);
will print out: 10023123553
up
-17
dalu at uni SPAMHAM dot de
21 years ago
copypasted from msdn

A format specification, which consists of optional and required fields, has the following form:

%[flags] [width] [.precision] [{h | l | I64 | L}]type

Each field of the format specification is a single character or a number signifying a particular format option. The simplest format specification contains only the percent sign and a type character (for example, %s). If a percent sign is followed by a character that has no meaning as a format field, the character is copied to stdout. For example, to print a percent-sign character, use %%.

The optional fields, which appear before the type character, control other aspects of the formatting, as follows:

type
Required character that determines whether the associated argument is interpreted as a character, a string, or a number (see the printf Type Field Characters table.
flags
Optional character or characters that control justification of output and printing of signs, blanks, decimal points, and octal and hexadecimal prefixes (see the Flag Characters table). More than one flag can appear in a format specification.
width
Optional number that specifies the minimum number of characters output (see printf Width Specification).
precision
Optional number that specifies the maximum number of characters printed for all or part of the output field, or the minimum number of digits printed for integer values (see the How Precision Values Affect Type table).
h | l | I64 | L
Optional prefixes to type-that specify the size of argument (see the Size Prefixes for printf and wprintf Format-Type Specifiers table).
up
-21
sam[NOSPAM] at [NOSPAM]kingdomfaith dot com
21 years ago
I don't know if this is useful to anyone, but here goes! Example for using the printf function to output an object.

class person
{
var $name = "";
function name($newname = NULL)
{
if(! is_null($newname))
{
$this->name=$newname;
}
return $this->name;
}
var $surname = "";
function surname($newsurname = NULL)
{
if(! is_null($newsurname))
{
$this->surname=$newsurname;
}
return $this->surname;
}
var $age = "";
function age($newage = NULL)
{
if(! is_null($newage))
{
$this->age=$newage;
}
return $this->age;
}
}

$bob = new person;
$bob->name('Bob');
$bob->surname('Builder');
$bob->age('50');

printf("Hi %s, your surname is %s and you are %s years old", $bob->name, $bob->surname, $bob->age);

Outputs:

Hi Bob, your surname is Builder and you are 50 years old
up
-26
creating dot www at gmail dot com
9 years ago
Why rounding is not same as for round()?

Try this code:

<?php
printf
("%.02lf\n", 1.035);
printf("%.02lf\n", round(1.035, 2));
?>
Result:
1.03
1.04

In my opion it should be:
1.04
1.04

Why is that?
up
-21
codeslinger at compsalot dot com
19 years ago
Several people have commented about problems with aligning numbers. I just wanted to add a bit of clarification.

According to the spec all True Type Fonts (especially porpotional spaced fonts) use a fixed width for numeric digits. All digits have the same width which is equal to the width of "0".

Where things go haywire when trying to align numbers is that the space character does not have the same width as a digit when using a porportional spaced font.

Therefore if you want to line up a column of numbers, you can not use leading spaces to position them unless you use the same quantity of space characters for each row. e.g. your numbers have leading zeros etc.

The simplest solution is to switch to a monospaced font. Alternativly you can use positioning tags.

Summary: Your numbers will always line up properly regardless of the font used, if you get the starting position to be consistant.
up
-21
kalai_msc29 at rediffmail dot com
16 years ago
//If you want to make many Hidden fields you can use the function
//You can pass the values as array value,This will help you, when you are going to post many hiddend fields:-
function MakeHidden($ArrValues)
{
global $dearvar;
echo $dearvar;
if(is_array($ArrValues)){
foreach($ArrValues as $key=>$values)
{
echo $MakeHTML = "<input type='hidden' name='$values' value='$values'>";
}
}


else {
echo $MakeHTML = "<input type='hidden' name='$ArrValues' value='$ArrValues'>";
}
return $MakeHTML;
}

//example:-

MakeHidden(array("value1","value2","value3"));

//OutPut :-

<input type="hidden" value="value1" name="value1"/>
<input type="hidden" value="value2" name="value2"/>
<input type="hidden" value="value3" name="value3"/>
up
-24
lordfarquaad at notredomaine dot net
20 years ago
In response to chris dot breen at accurate dot com :

This will work, but i didn't try:
<?php
$format
= 'The %2$s contains %1$d monkeys.
That is a nice %2$s full of %1$d monkeys.'
;
printf($format, $num, $location);
?>

Your problem came from the fact that in the string "\$s", the $ is simply escaped by the \, but but you must not do that with single quoted strings. Try to echo your strings to test it, or just go to http://www.php.net/manual/en/language.types.string.php
To Top