PHP Function Reference

PHP printf() Function

The PHP printf() function produces output according to the specified format. If format includes format specifiers (sub-sequences beginning with %), the additional arguments following format are formatted and inserted in the resulting string replacing their respective specifiers.

After the format parameter, the function expects additional arguments at least as many as the number of format specifiers in the format string.


printf(format, arguments)



Required. Specify the format string. The possible values of %specifier are:

  • %% - Returns a percent sign
  • %b - Binary number
  • %c - The character according to the ASCII value
  • %d - Signed decimal number (negative, zero or positive)
  • %e - Scientific notation using a lowercase (e.g. 1.2e+3)
  • %E - Scientific notation using a uppercase (e.g. 1.2E+3)
  • %u - Unsigned decimal number (zero or positive)
  • %f - Floating-point number (locale setting aware)
  • %F - Floating-point number (non-locale setting aware)
  • %g - Shorter of %e and %f
  • %G - Shorter of %E and %f
  • %h - Shorter of %F. Available as of PHP 8.0.0
  • %H - Shorter of %E and %F. Available as of PHP 8.0.0
  • %o - Octal number
  • %s - String
  • %x - Hexadecimal number (lowercase letters)
  • %X - Hexadecimal number (uppercase letters)

Additional format values can be placed between the % and the specifier (e.g. %.3f). The possible values which can be placed in between are:

  • Flags:
    • - : Left-justify within the given field width. Right justification is the default.
    • + : Prefix positive numbers with a plus sign +. By default only negative are prefixed with a negative sign.
    • (space) : Pads the result with spaces. This is the default.
    • 0 : Only left-pads numbers with zeros. With s specifiers this can also right-pad with zeros.
    • '(char) : Pads the result with the character (char). Example: %'x20s (this uses "x" as padding).
  • Width: Specify an integer which tells how many characters (minimum) this conversion should result in.
  • Precision: Specify period . followed by an integer. Signifies number of decimal digits or maximum string length.
    • For e, E, f and F specifiers: It signifies the number of decimal digits (Default is 6).
    • For g, G, h and H specifiers: It signifies the maximum number of significant digits.
    • For s specifier: It specifies a cutoff point, setting maximum string length.

Note: If multiple additional format values are provided, they must be in %[flags][width][.precision]specifier order.

arguments Optional. Depending on the format string, a sequence of additional arguments should be passed in the function, each containing a value to replace a format specifiers in the format string. Number of arguments should be at least equal to the number of format specifiers in the format string. Additional arguments will be ignored by this function.

Return Value

Returns the length of the outputted string.

Example: different specifiers

In the example below, a given variable is outputted using different specifier.

$n =  5000;
$u = -5000;
$c = 66; // ASCII 66 is 'B'

//%% is used to print '%' character
printf("%%b = %b\n", $n); //binary 
printf("%%c = %c\n", $c); //ASCII character
printf("%%d = %d\n", $n); //integer
printf("%%e = %e\n", $n); //scientific notation
printf("%%u = %u\n", $n); //unsigned integer (+ve number)
printf("%%u = %u\n", $u); //unsigned integer (-ve number)
printf("%%f = %f\n", $n); //floating point
printf("%%o = %o\n", $n); //octal 
printf("%%s = %s\n", $n); //string 
printf("%%x = %x\n", $n); //hexadecimal (lowercase)
printf("%%X = %X\n", $n); //hexadecimal (uppercase)

printf("%%+d = %+d\n", $n); //sign specifier (+ve number)
printf("%%+d = %+d\n", $u); //sign specifier (-ve number)

The output of the above code will be:

%b = 1001110001000
%c = B
%d = 5000
%e = 5.000000e+3
%u = 5000
%u = 18446744073709546616
%f = 5000.000000
%o = 11610
%s = 5000
%x = 1388
%X = 1388
%+d = +5000
%+d = -5000

Example: using multiple % signs

In the example below, multiple % signs are used to place multiple additional arguments in the outputted string.

$name =  'John';
$age = 25;

printf("%s is %d years old.\n", $name, $age);

//using precision format
printf("%s is %.2f years old.\n", $name, $age);

The output of the above code will be:

John is 25 years old.
John is 25.00 years old.

Example: output a date string

In the example below, this function is used to output formatted date string.

$year =  2015;
$month = 5;
$day = 1;

//each format specifier specifies padding 
//with 0 and width of the field
printf("%04d-%02d-%02d", $year, $month, $day);

The output of the above code will be:


Example: string specifiers

Consider one more example to see how to use string specifiers with a given string.

$x = 'catfish';
$y = 'many catfishes';

printf("[%s]\n",      $x); //standard string output
printf("[%10s]\n",    $x); //right-justification with spaces
printf("[%-10s]\n",   $x); //left-justification with spaces
printf("[%010s]\n",   $x); //zero-padding works on strings too
printf("[%'#10s]\n",  $x); //using custom padding character '#'
printf("[%10.8s]\n",  $y); //right-justification (8 characters cutoff)
printf("[%-10.8s]\n", $y); //left-justification (8 characters cutoff)

The output of the above code will be:

[   catfish]
[catfish   ]
[  many cat]
[many cat  ]

❮ PHP String Reference