aprender PHP logo

printf e sprintf em PHP fazem praticamente a mesma coisa, criam uma string formatada dependendo de diretivas que são formadas por texto normal (sem o sinal de %).

Veja sua descrição no manual do PHP:

string sprintf ( string $formato [, mixed $args [, mixed $... ]] )

printf e sprintf em PHP

Ambas, sprintf e printf têm a mesma descrição e aceitam os mesmos argumentos, a única diferença entre ambas é que a função printf exibe valores na tela, sprintf salva o valor em uma variável.

Formato

O primeiro parâmetro aceito por sprintf e printf é o $formato, que é o valor que vai conter o texto e as diretivas. Por exemplo:

<?php
// Uma string
printf('%s', 'Uma string');
?>

No trecho acima, tenho apenas uma diretiva, o %s, que é tratado e mostrado como uma string.

Veja as possibilidades de diretivas:

  • %b – O argumento é tratado com inteiro e mostrado como binário;
  • %c – O argumento é tratado como inteiro e mostrado como o caractere ASCII correspondente;
  • %d – O argumento é tratado inteiro e mostrado como número decimal com sinal de positivo ou negativo.
  • %e – O argumento é tratado como notação científica (Ex.: 1.2e+2). O especificador de precisão indica o número de dígitos depois do ponto decimal (desde o PHP 5.2.1).
  • %u – O argumento é tratado com inteiro e mostrado como número decimal sem sinal.
  • %f – O argumento é tratado como float e mostrado como número de ponto flutuante (do locale).
  • %F – O argumento é tratado como float e mostrado como número de ponto flutuante (não usando o locale).
  • %o – O argumento é tratado com inteiro e mostrado como um número octal.
  • %s – O argumento é tratado e mostrado como uma string.
  • %x – O argumento é tratado como inteiro e mostrado como número hexadecimal (com as letras minúsculas).
  • %X – O argumento é tratado como inteiro e mostrado como número hexadecimal (com as letras maiúsculas).

Veja outro exemplo de uso de printf:

<?php
// Agora
$hora = array(
	9,
	14,
	'AM'
);

// Uma string
$estou = 'escrevendo';

// Formata: São 9:14AM e estou escrevendo.
printf('São %d:%d%s e estou %s.', $hora[0], $hora[1], $hora[2], $estou);
?>

Ou vários exemplos:

<?php
$numero = 65;

printf('%b <br>', $numero); // 1000001
printf('%c <br>', $numero); // A
printf('%d <br>', $numero); // 65
printf('%e <br>', $numero); // 6.500000e+1
printf('%u <br>', $numero); // 65
printf('%f <br>', $numero); // 65.000000
printf('%F <br>', $numero); // 65.000000
printf('%o <br>', $numero); // 101
printf('%s <br>', $numero); // 65
printf('%x <br>', $numero); // 41
printf('%X <br>', $numero); // 41 
?>

Note que o <br>  serve apenas para quebra de linha em HTML.

Formatos mais avançados

Você também pode indicar que a função adicione espaços para a direita ou para a esquerda no valor. Veja exemplos:

<?php
// Um número
$numero = 65;

// Apenas uma tag HTML
echo '<pre>';

// Adiciona 11 espaços para a direita
printf("'%-11d'", $numero);  // '65         '

// Adiciona 11 espaços para a esquerda
printf("'%11d'", $numero);   // '         65'

// Adiciona 11 espaços para a esquerda
// e conta apenas um caractere para a string (s)
printf("'%11.1s'", $numero); // '          6'

// Apenas o fechamento da tag HTML
echo '</pre>';
?>

Perceba que o sinal de – (menos) indica que os espaços serão adicionados para a direita, se você não especificar este sinal, os espaços serão adicionados para a esquerda. Veja também que você pode adicionar um ponto (.) e indicar a quantidade de caracteres a serem apresentados.

Mais exemplos

Veja mais exemplos:

<?php
// Formata data: 20/04/1987
printf('%02d/%02d/%04d', 20, 04, 1987);

// Formata dinheiro: 50.59
printf("%01.2f", 000050.59);
?>

Diferença entre printf e sprintf em PHP

A única diferente de printf e sprintf é que sprintf não vai exibir os valores, e sim salva-los em uma variável. Veja:

<?php
// Crio uma variável com sprintf
$variavel = sprintf('Tenho %d anos.', 27);

// Só agora vou exibir seu valor
echo $variavel; // Tenho 27 anos.
?>

 Mais detalhes sobre printf e sprintf

Para maiores informações sobre printf e sprintf acesse:

Em caso de dúvidas, basta comentar.