Cómo agregar ceros a la izquierda a un número en PHP: 4 formas prácticas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Ceros a la izquierda en PHP: por qué es importante y cómo no equivocarse

\n\n

Imagina la situación: estás escribiendo una tienda en línea y necesitas mostrar el número de pedido. El cliente ve «Pedido nº 42» y al lado «Pedido nº 7». Se ve descuidado, ¿verdad? Inmediatamente quieres hacer «Pedido nº 00042» y «Pedido nº 00007». O trabajas con fechas: el mes de enero debe ser 01, no solo 1. Aquí es donde los ceros a la izquierda en PHP son útiles.

\n\n

La pregunta «Formatting a number with leading zeros in PHP» es una de las más populares en Stack Overflow. Miles de desarrolladores buscan la respuesta sobre cómo convertir el número 5 en 005 o 42 en 0042. Parece un detalle, pero sin el enfoque correcto puedes obtener errores, especialmente al trabajar con bases de datos o APIs.

\n\n

En este artículo te mostraré 4 formas prácticas de agregar ceros a la izquierda a un número en PHP. Aprenderás en qué se diferencia sprintf de str_pad, cuándo usar printf y por qué el viejo y confiable substr también puede ser útil. ¡Allá vamos!

\n\n

Forma 1: sprintf — el rey del formateo

\n\n

La función sprintf es, probablemente, la forma más elegante de resolver el problema. Llegó a PHP desde el lenguaje C y sabe formatear cadenas según una plantilla. Para los ceros a la izquierda se usa el especificador %0Nd, donde N es la longitud total del número incluidos los ceros.

\n\n

Ejemplo básico

\n
<?php\n$number = 7;\n$formatted = sprintf("%05d", $number);\necho $formatted; // Muestra: 00007\n?>\n
\n\n

Analicemos la plantilla "%05d":

\n
    \n
  • % — inicio del especificador
  • \n
  • 0 — rellenar con ceros, no con espacios
  • \n
  • 5 — longitud total de la cadena (5 caracteres)
  • \n
  • d — número entero (decimal)
  • \n
\n\n

Trabajo con números negativos

\n

Ten en cuenta: si el número es negativo, los ceros a la izquierda aparecerán después del signo menos:

\n
<?php\n$number = -42;\necho sprintf("%05d", $number); // Muestra: -0042\n?>\n
\n\n

Longitud dinámica

\n

Si la longitud necesaria no se conoce de antemano, puedes usar * en la plantilla:

\n
<?php\n$number = 123;\n$length = 8;\necho sprintf("%0{$length}d", $number); // Muestra: 00000123\n// O mediante *\necho sprintf("%0*d", $length, $number); // Muestra: 00000123\n?>\n
\n\n

Ventajas: flexibilidad, legibilidad, soporte para diferentes tipos de datos.
\nDesventajas: hay que recordar la sintaxis de los especificadores.

\n\n

Forma 2: str_pad — simplicidad y claridad

\n\n

La función str_pad trabaja a nivel de cadenas. Tomas el número, lo conviertes en cadena y lo «rellenas» con ceros a la izquierda hasta la longitud deseada. Es intuitivo incluso para un principiante.

\n\n

Sintaxis

\n
<?php\n$number = 7;\n$formatted = str_pad($number, 5, "0", STR_PAD_LEFT);\necho $formatted; // Muestra: 00007\n?>\n
\n\n

Parámetros:

\n
    \n
  • $number — cadena de entrada (el número se convierte automáticamente)
  • \n
  • 5 — longitud deseada del resultado
  • \n
  • "0" — carácter de relleno
  • \n
  • STR_PAD_LEFT — rellenar por la izquierda (también existen STR_PAD_RIGHT y STR_PAD_BOTH)
  • \n
\n\n

Detalle importante: si el número es más largo

\n

Si el número original ya es más largo que la longitud especificada, str_pad simplemente lo devuelve tal cual:

\n
<?php\necho str_pad(123456, 3, "0", STR_PAD_LEFT); // Muestra: 123456 (¡no recorta!)\n?>\n
\n\n

Comparación con sprintf

\n
<?php\n$number = 42;\necho sprintf("%05d", $number);   // 00042\necho str_pad($number, 5, "0", STR_PAD_LEFT); // 00042\n// El resultado es el mismo, pero el código se lee de manera diferente\n?>\n
\n\n

Ventajas: sintaxis obvia, no es necesario recordar especificadores.
\nDesventajas: solo funciona con cadenas, no tiene incor

Blogs

Book Recommendations