Usando a função sprintf()
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:
Com a função printf(), ficaria:
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:
Ficaria assim:
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):
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:
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.
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.
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
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)
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.
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
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)
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?