Ceros a la izquierda en PHP: por qué es importante y cómo no equivocarse
\n\nImagina 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.
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\nEn 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!
Forma 1: sprintf — el rey del formateo
\n\nLa 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.
Ejemplo básico
\n<?php\n$number = 7;\n$formatted = sprintf("%05d", $number);\necho $formatted; // Muestra: 00007\n?>\n\n\nAnalicemos la plantilla "%05d":
- \n
%— inicio del especificador \n0— rellenar con ceros, no con espacios \n5— longitud total de la cadena (5 caracteres) \nd— número entero (decimal) \n
Trabajo con números negativos
\nTen 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\nLongitud dinámica
\nSi la longitud necesaria no se conoce de antemano, puedes usar * en la plantilla:
<?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\nVentajas: flexibilidad, legibilidad, soporte para diferentes tipos de datos.
\nDesventajas: hay que recordar la sintaxis de los especificadores.
Forma 2: str_pad — simplicidad y claridad
\n\nLa 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.
Sintaxis
\n<?php\n$number = 7;\n$formatted = str_pad($number, 5, "0", STR_PAD_LEFT);\necho $formatted; // Muestra: 00007\n?>\n\n\nParámetros:
\n- \n
$number— cadena de entrada (el número se convierte automáticamente) \n5— longitud deseada del resultado \n"0"— carácter de relleno \nSTR_PAD_LEFT— rellenar por la izquierda (también existenSTR_PAD_RIGHTySTR_PAD_BOTH) \n
Detalle importante: si el número es más largo
\nSi el número original ya es más largo que la longitud especificada, str_pad simplemente lo devuelve tal cual:
<?php\necho str_pad(123456, 3, "0", STR_PAD_LEFT); // Muestra: 123456 (¡no recorta!)\n?>\n\n\nComparació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\nVentajas: sintaxis obvia, no es necesario recordar especificadores.
\nDesventajas: solo funciona con cadenas, no tiene incor