Números com zeros à esquerda em PHP: solução simples e prática

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como transformar "1" em "001" no PHP? Guia completo com código

\n\n

Você já precisou exibir o número 7, mas o sistema (ou o cliente) exigia 007? Ou talvez esteja gerando números de pedido: 42 → 00042? Ou trabalhando com datas, onde o mês deve ter dois dígitos: 1 → 01?

\n\n

Bem-vindo ao mundo dos zeros à esquerda (leading zeros) no PHP. Essa é uma daquelas tarefas que parecem simples, mas têm várias armadilhas. Neste artigo, vamos explorar todas as formas de adicionar zeros antes de um número, comparar o desempenho de cada método e descobrir quando usar cada um.

\n\n

O artigo é voltado tanto para iniciantes quanto para desenvolvedores experientes. Não vamos apenas copiar respostas do Stack Overflow; vamos detalhar cada exemplo passo a passo. Vamos nessa!

\n\n

Por que usar zeros à esquerda?

\n\n

Zeros à esquerda são zeros colocados antes dos dígitos significativos de um número. Por exemplo, 007 em vez de 7. Na prática, eles são úteis para:

\n\n
    \n
  • Formatar números: pedidos, faturas, boletos. "Pedido nº 0001" parece mais profissional do que "Pedido nº 1".
  • \n
  • Ordenação: em sistemas de arquivos e bancos de dados, a ordenação de strings como "1", "10", "2" resulta em ordem errada. Já "01", "02", "10" fica correta.
  • \n
  • Datas e horas: 2023-01-05 segue o padrão ISO 8601. Sem o zero à esquerda, o dia ou mês "5" quebra o formato.
  • \n
  • APIs e protocolos: muitas APIs exigem um comprimento fixo de campo.
  • \n
\n\n

O PHP não tem uma função nativa do tipo "deixe bonito", mas oferece ferramentas poderosas que vamos dominar agora.

\n\n

Método 1: sprintf — o rei da formatação

\n\n

A maneira mais popular, que você encontrará no Stack Overflow, é a função sprintf(). Ela veio da linguagem C e formata strings usando um modelo.

\n\n

Como funciona?

\n\n

Sintaxe: sprintf(formato, variável). O formato é definido por placeholders especiais que começam com %. Para números com zeros à esquerda, usamos %0Nd, onde N é o comprimento total da string e d é o tipo de dado (número inteiro).

\n\n
<?php\n$numero = 7;\n$formatado = sprintf("%03d", $numero);\necho $formatado; // Exibe: 007\n?>
\n\n

Detalhando cada caractere:

\n
    \n
  • % — início do placeholder
  • \n
  • 0 — caractere de preenchimento (zero)
  • \n
  • 3 — comprimento total da string resultante
  • \n
  • d — número inteiro (decimal)
  • \n
\n\n

Se o número for maior que o comprimento definido, o sprintf simplesmente o exibe como está:

\n\n
<?php\necho sprintf("%03d", 12345); // Exibe: 12345 (não corta!)\n?>
\n\n

Trabalhando com números decimais

\n\n

E se o número não for inteiro? Por exemplo, precisa exibir 3.14 como 003.14? Para isso, use %0N.f:

\n\n
<?php\n$decimal = 3.14;\necho sprintf("%06.2f", $decimal); // Exibe: 003.14\n// 6 — comprimento total, 2 — número de casas decimais\n?>
\n\n

Importante: o sprintf não altera a variável original, apenas retorna uma nova string. Se quiser exibir diretamente, use printf() (sem a letra s).

\n\n

Método 2: str_pad — o "preenchedor" universal

\n\n

O segundo método mais comum é a função str_pad(). Ela não é específica para números, mas funciona muito bem com strings. E no PHP, um número se converte facilmente em string.

\n\n
<?php\n$numero = 42;\n$formatado = str_pad($numero, 5, "0", STR_PAD_LEFT);\necho $formatado; // Exibe: 00042\n?>
\n\n

Parâmetros:

\n
    \n
  1. String de entrada
  2. \n
  3. Comprimento final desejado
  4. \n
  5. String de preenchimento (neste caso, "0")
  6. \n
  7. Tipo de preenchimento: STR_PAD_LEFT (à esquerda), STR_PAD_RIGHT (à direita) ou STR_PAD_BOTH (em ambos os lados)
  8. \n
\n\n

Dica: se a string original for maior que o comprimento definido, o str_pad retorna a string original sem alterações.

\n\n

Método 3: str_repeat — para casos simples

\n\n

Se você precisa de uma solução rápida e sem frescuras, pode usar str_repeat() combinado com concatenação:

\n\n
<?php\n$numero = 7;\n$zeros = str_repeat("0", 2); // Gera "00"\necho $zeros . $numero; // Exibe: 007\n?>
\n\n

Esse método é menos flexível, mas útil em situações muito específicas.

\n\n

Comparação de desempenho

\n\n

Em termos de velocidade, o sprintf é geralmente mais rápido que o str_pad para números, pois é otimizado para formatação. No entanto, a diferença é mínima para a maioria dos casos. Use o que fizer seu código mais legível.

\n\n

Conclusão

\n\n

Agora você conhece as principais técnicas para adicionar zeros à esquerda no PHP. Lembre-se:

\n
    \n
  • sprintf é ideal para formatação complexa e números.
  • \n
  • str_pad é versátil e funciona com qualquer string.
  • \n
  • str_repeat é uma alternativa simples para casos básicos.
  • \n
\n\n

Pratique com os exemplos e escolha o método que melhor se adapta ao seu projeto. Se tiver dúvidas, deixe um comentário abaixo. Bons códigos!

Blogs

Book Recommendations