printf

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

printfOutput a formatted string

Descrição

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

Produces output according to format.

Parâmetros

format

A string de formato é composta de zero ou mais diretivas: caracteres comuns (excluindo %) que são copiados diretamente para o resultado e especificações de conversão, cada uma das quais resulta na busca de seu próprio parâmetro.

Uma especificação de conversão segue este protótipo: %[argnum$][flags][width][.precision]especificador.

Argnum

Um número inteiro seguido por um cifrão $, para especificar qual o número de argumento a tratar na conversão.

Flags
Flag Descrição
- Justificar à esquerda dentro da largura de campo especificada; A justificação à direita é o padrão.
+ Prefixa números positivos com um sinal de mais +; Por padrão, apenas números negativos são prefixados com um sinal negativo.
(espaço) Preenche o resultado com espaços. Este é o padrão.
0 Preenche números com zeros apenas à esquerda. Com os especificadores s, também pode preencher com zeros à direita.
'(char) Preenche o resultado com o caractere (char).

Width

Um número inteiro que define em quantos caracteres (mínimo) esta conversão deve resultar, ou *. Se * for usado, a largura será fornecida como um valor inteiro adicional precedendo aquele formatado pelo especificador.

Precision

Um ponto . opcionalmente seguido por um número inteiro ou *, cujo significado depende do especificador:

  • Para os especificadores e, E, f e F: este é o número de dígitos a serem impressos após o ponto decimal (por padrão, é 6).
  • Para os especificadores g, G, h e H: este é o número máximo de dígitos significativos a serem impressos.
  • Para o especificador s: atua como um ponto de corte, definindo um limite máximo de caracteres para a string.

Nota: Se o ponto for especificado sem um valor explícito para precisão, 0 é assumido. Se * for usado, a precisão é fornecida como um valor inteiro adicional precedendo aquele formatado pelo especificador.

Especificadores
Especificador Descrição
% Um caractere literal de porcentagem. Nenhum argumento é necessário.
b O argumento é tratado como um número inteiro e apresentado como um número binário.
c O argumento é tratado como um número inteiro e apresentado como o caractere com aquele código ASCII.
d O argumento é tratado como um número inteiro e apresentado como um número decimal (com sinal).
e O argumento é tratado como notação científica (por exemplo, 1.2e+2).
E Como o especificador e, mas usa letra maiúscula (por exemplo, 1.2E+2).
f O argumento é tratado como um float e apresentado como um número de ponto flutuante (com reconhecimento da localidade).
F O argumento é tratado como um float e apresentado como um número de ponto flutuante (sem reconhecimento da localidade).
g

Formato geral.

Deixa P igual à precisão se for diferente de zero, 6 se a precisão for omitida, ou 1 se a precisão for zero. Então, se uma conversão com estilo E tivesse um expoente de X:

Se P > X ≥ −4, a conversão é com estilo f e precisão P − (X + 1). Caso contrário, a conversão é com estilo e e precisão P − 1.

G Como o especificador g, mas usa E e f.
h Como o especificador g, mas usa F. Disponível a partir do PHP 8.0.0.
H Como o especificador g, mas usa E e F. Disponível a partir do PHP 8.0.0.
o O argumento é tratado como um número inteiro e apresentado como um número octal.
s O argumento é tratado e apresentado como uma string.
u O argumento é tratado como um número inteiro e apresentado como um número decimal sem sinal.
x O argumento é tratado como um número inteiro e apresentado como um número hexadecimal (com letras minúsculas).
X O argumento é tratado como um número inteiro e apresentado como um número hexadecimal (com letras maiúsculas).

Aviso

O especificador de tipo c ignora preenchimento e largura.

Aviso

Tentar usar uma combinação dos especificadores de string e largura com conjuntos de caracteres que requerem mais de um byte por caractere pode resultar em resultados inesperados.

As variáveis serão forçadas a um tipo adequado para o especificador:

Tratamento de Tipos
Tipo Especificadores
string s
int d, u, c, o, x, X, b
float e, E, f, F, g, G, h, H

values

Valor Retornado

Returns the length of the outputted string.

Erros/Exceções

A partir do PHP 8.0.0, um erro ValueError será lançado se o número de argumentos for zero. Antes do PHP 8.0.0, um E_WARNING era emitido.

A partir do PHP 8.0.0, um erro ValueError será lançado se [width] for menor que zero ou maior que PHP_INT_MAX. Antes do PHP 8.0.0, um E_WARNING era emitido.

A partir do PHP 8.0.0, um erro ValueError será lançado se [precision] for menor que zero ou maior que PHP_INT_MAX. Antes do PHP 8.0.0, um E_WARNING era emitido.

A partir do PHP 8.0.0, um erro ArgumentCountError será lançado quando menos argumentos do que o necessário forem fornecidos. Antes do PHP 8.0.0, false era retornado e um E_WARNING era emitido.

Registro de Alterações

Versão Descrição
8.0.0 Esta função não retorna mais false em caso de falha.
8.0.0 Lança um erro ValueError se o número de argumentos for zero; anteriormente, esta função emitia um E_WARNING.
8.0.0 Lança um erro ValueError se [width] for menor que zero ou maior que PHP_INT_MAX; anteriormente, esta função emitia um E_WARNING.
8.0.0 Lança um erro ValueError se [precision] for menor que zero ou maior que PHP_INT_MAX; anteriormente, esta função emitia um E_WARNING.
8.0.0 Lança um erro ArgumentCountError quando menos argumentos do que o necessário são fornecidos; anteriormente, esta função emitia um E_WARNING.

Exemplos

Exemplo #1 printf(): various examples

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

// notice the double %%, this prints a literal '%' character
printf("%%b = '%b'\n", $n); // binary representation
printf("%%c = '%c'\n", $c); // print the ascii character, same as chr() function
printf("%%d = '%d'\n", $n); // standard integer representation
printf("%%e = '%e'\n", $n); // scientific notation
printf("%%u = '%u'\n", $n); // unsigned integer representation of a positive integer
printf("%%u = '%u'\n", $u); // unsigned integer representation of a negative integer
printf("%%f = '%f'\n", $n); // floating point representation
printf("%%o = '%o'\n", $n); // octal representation
printf("%%s = '%s'\n", $n); // string representation
printf("%%x = '%x'\n", $n); // hexadecimal representation (lower-case)
printf("%%X = '%X'\n", $n); // hexadecimal representation (upper-case)

printf("%%+d = '%+d'\n", $n); // sign specifier on a positive integer
printf("%%+d = '%+d'\n", $u); // sign specifier on a negative integer
?>

O exemplo acima produzirá:

%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'

Exemplo #2 printf(): string specifiers

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

printf("[%s]\n", $s); // standard string output
printf("[%10s]\n", $s); // right-justification with spaces
printf("[%-10s]\n", $s); // left-justification with spaces
printf("[%010s]\n", $s); // zero-padding works on strings too
printf("[%'#10s]\n", $s); // use the custom padding character '#'
printf("[%'#*s]\n", 10, $s); // Provide the padding width as an additional argument
printf("[%10.9s]\n", $t); // right-justification but with a cutoff of 8 characters
printf("[%-10.9s]\n", $t); // left-justification but with a cutoff of 8 characters
?>

O exemplo acima produzirá:

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

Veja Também

  • print - Mostra uma string
  • sprintf() - Return a formatted string
  • fprintf() - Escreve uma string formatada para um fluxo
  • vprintf() - Output a formatted string
  • vsprintf() - Return a formatted string
  • vfprintf() - Escreve uma string formatada para um fluxo
  • sscanf() - Interpreta a entrada de uma string de acordo com um formato
  • fscanf() - Interpreta a leitura de um arquivo de acordo com um formato
  • number_format() - Format a number with grouped thousands
  • date() - Formatar um timestamp Unix
  • flush() - Flush system output buffer

add a note add a note

User Contributed Notes 16 notes

up
12
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
3
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
1
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
-3
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
-4
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
-13
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
-14
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
-19
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
-16
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
-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
-19
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
-19
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
-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
-25
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