+1

Usando a função sprintf()

criado por Jayr H. C. Porto em 17/12/2003 3:29pm
Uma ótima saída para a utilização de saídas formatadas, é a utilização da função printf(). Primeiro, vamos a alguns conceitos básicos sobre ela:

Utilização: PHP3 ou superior.
Instalação: Nenhuma biblioteca ou instalação adicional é necessária à sua utilização.
Formulação Básica: string printf ( formato [, argumentos]).

A função printf() é utilizada para possibilitar a impressão formatada de um literal, seguindo padrões específicos de exibição. Vamos retornar ao último exemplo:
<?
echo 'NOME: "'.$nome.'"';
?>

Com a função printf(), ficaria:
<?
printf('NOME: "%s. "', $nome);
?>

Abrindo o código acima, veremos que existem dois blocos de informações distintos dentro da função que são:

'NOME: "%s. "'
Dentro de aspas simples, mando imprimir: NOME: “%s”.

$nome
A váriável nome que substituirá o conteúdo do %s.

A grande vantagem deste comando é que, não importa o conteúdo da variável que substituirá o %s (obs, “s” em caixa baixa). O comando imprime seu conteúdo até achar o Wildcard %x (%s no nosso caso) e substituirá pela sua ocorrência proporcional. Isso quer dizer que, se forem localizados 10 “%s” no literal a ser impresso, deverão haver 10 variáveis (ou similares) separados por vírgula para os substituirem.

Vejamos um exemplo que demos anteriormente:
<?
echo "Olá, $nome.<br>Hoje é dia $data, $dia.<br>Bem vindo!";
?>

Ficaria assim:
<?
printf('Olá, %s.<br>Hoje é dia %s, %s.<br>Bem vindo!', $nome, $data, $dia);
?>

O primeiro %s foi substituido por $nome, o segundo, por $data e o terceiro por $dia 8e assim por diante.

Pô. Esse cara complicou. Prefiro usar a primeira opção! É mais simples!…
Concordo, nesse caso, ficaria mais simples utilizar a versão de echo do que a printf() mas, vejamos um exemplo com formatação HTML, que complica muito a escrita. Para exemplificar, vou utilizar uma questão postada nos fóruns e que pode ser vusializada em http://phpbrasil.com/phorum/read.php?f=5&i=5534&t=5524.
A dúvida de nosso amigo é que, além de precisar de uma saída formatada em HTML, ele tem em seu banco de dados um campo (titulo) que contém o caracter %. A instrução printf() dele era (simulei as variáveis para simplificar o entendimento):
<?
$id = "1";
$titulo = '%teste%';
$data = "10/03/2003";
printf('
<font size="1" face="Verdana">ID: '.$id.'<br>
Titulo: '.$titulo.'<br>
Data / Hora: '.$data.'<br>
Ação: <a href="deletar.php?acao=del&id='.$id.'">Deletar</a> | <a href="editar.php?id='.$id.'">Editar</a></font>
<hr>
');
?>

Se executarmos este pedaço de código, teremos o erro:
Warning: printf(): too few arguments in /home/folheteria/teste.php on line 11

Corrigindo, teriamos:
<?
$id = "1";
$titulo = '%teste%';
$data = "10/03/2003";
printf('
<font size="1" face="Verdana">ID: %s<br>
Titulo: %s<br>
Data / Hora: %s<br>
Ação: <a href="deletar.php?acao=del&id=%s">Deletar</a> | <a href="editar.php?id=%s">Editar</a></font>
<hr>
', $id, $titulo, $data, $id, $id);
?>

Testem vejam como ter uma saída limpa. Vejam bem, não estou trabalhado a forma com que nosso amigo escreveu seu código e sim, corrigindo seus erros.

Na próxima página, exiberei as convenções de especificação existentes (ou que conheço e testei) e alguns erros comuns.

Comentários:

Mostrando 1 - 6 de 6 comentários
Prof. Baco disse:
Olá tudo bem?
Eu li o seu artigo e o achei muito interessante mas não estou conesguindo formatar o valor de mil e milhar, ou seja:
$v1 = 1,234
$v2 = 134,358
sprintf('%0.2f',$v1) = 1.24
sprintf('%0.2f',$v2) = 134.36
Até aí tudo bem, mas se eu tiver valores acima de 1000, como por exemplo
$v3 = 1234,44343
sprintf('%0.2f',$v3) = 1234.44
E eu queria que ficasse assim:
sprintf('%0.2f',$v3) = 1 234.44
Mas não fica... sabe como resolver este problema?
24/10/2006 12:05pm (~18 anos atrás)

Alexandre disse:
Existe uma forma fácil de formatar os números e valores para o Brasil usando sprintf:

A função sprintf ou printf utiliza as informações da localidade atual. Isto pode, e vai, variar de um OS para outro.

Utilize antes das funções sprintf ou em um local genérico o seguinte :

setlocale(LC_ALL,'pt_BR');

O ideal é consultar a documentação de setlocale para mais detalhes.

Veja o resultado
em um exemplo simples:

<?php
$number = 192.65;
echo setlocale(LC_ALL,'pt_BR');
echo sprintf("%01.2f",$number);
?>

Produzirá a saída :

192,65

Usando isto vc pode estender para colocar a literal R$ antes e etc...


Espero ter ajudado !
Alexandre




15/12/2005 5:04am (~19 anos atrás)

Valeu, gostei muito da sua dica, ja fiquei muitas vezes doido na hora de imprimir muita informação, acho que agora terei menos problemas.
28/11/2005 4:59am (~19 anos atrás)

É bom lembrar que é interessante usar stripslashes ao invés de escapar com barras invertidas... principalmente ao retornar de um banco de dados onde as vezes não sabemos que resultado virá.

ex: $nome = stripslashes($nome)
09/01/2004 12:05pm (~21 anos atrás)

Na realidade, sprintf() e printf() são a mesma função em php. Eu utilizei o Sprint no título e no preâmbulo do artigo pois é a função onde esta a descrição do uso no manual do PHP.

Mesmo no manual, você poderá verificar que a descrição da função se encontra no tópico sprintf. Se você acessar o printf, ele diz que a explicação esta na outra função. Para simplificar o entendimento de alguém que por ventura quisesse verificar no manual, tentei ser coerente.
26/12/2003 5:47am (~21 anos atrás)

Primeiro quero falar que ta bem legal o artigo... e eh bem interessante o uso dessa funcao.
Mas nao entendi se vc queria falar sobre sprintf ou printf, acho que provavelmente errou no titulo, ja que usou printf() no artigo
21/12/2003 7:25pm (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)