printf()
La función printf() de PHP genera una cadena formateada según una plantilla, controlando decimales, relleno, ancho y base numérica.
La función printf() de PHP genera una cadena formateada según una plantilla. A diferencia de echo, que simplemente concatena e imprime valores tal como son, printf() te permite controlar exactamente cómo aparece cada valor — su ancho, número de decimales, relleno, signo y base numérica — insertando especificadores de formato (marcadores de posición como %s o %.2f) en una cadena de formato. Es la herramienta adecuada cuando importa el diseño de la salida: tablas alineadas, dinero con dos decimales, IDs con ceros a la izquierda o códigos de color hexadecimales.
Esta página cubre la sintaxis, la anatomía de un especificador de formato, las conversiones más comunes con ejemplos ejecutables y las funciones relacionadas de la misma familia.
Sintaxis
printf(string $format, mixed ...$values): int$format— una cadena de plantilla que contiene texto literal más uno o más especificadores de formato.$values— los valores sustituidos en los especificadores, en orden.- Devuelve el número de caracteres escritos (la longitud de la salida), no la cadena en sí.
printf()imprime directamente en la salida. Si deseas que la cadena formateada se devuelva en lugar de imprimirse, usasprintf().
Un ejemplo básico
%s es reemplazado por el primer argumento ($name) formateado como cadena, y %d por el segundo ($age) formateado como entero con signo. La salida es:
My name is John Doe and I am 35 years old.Anatomía de un especificador de formato
Cada especificador comienza con % y puede incluir partes opcionales en este orden:
%[argnum$][flags][width][.precision]specifier- flags — p. ej.
0(rellenar con ceros),-(alinear a la izquierda),+(mostrar siempre el signo),' '(un espacio rellena con ese carácter). - width — el número mínimo de caracteres que ocupa el campo.
- .precision — para números de punto flotante, el número de dígitos después del punto decimal; para cadenas, la longitud máxima.
- specifier — el tipo de conversión (ver más abajo).
Para mostrar un símbolo de porcentaje literal, escápalo como %%.
Especificadores de conversión comunes
| Especificador | Convierte el argumento a |
|---|---|
%s | una cadena |
%d | un entero decimal con signo |
%f | un número de punto flotante |
%b | binario |
%o | octal |
%x / %X | hexadecimal en minúsculas / mayúsculas |
%e | notación científica |
%% | un % literal |
Ancho, precisión y relleno
Aquí es donde printf() demuestra su utilidad. El ejemplo a continuación formatea un precio con dos decimales, rellena un ID con ceros hasta 5 dígitos y representa un número como color hexadecimal:
<?php
$price = 7.5;
$id = 42;
$color = 16711680; // red
printf("Price: $%.2f\n", $price);
printf("Order ID: %05d\n", $id);
printf("Color: #%06X\n", $color);
?>Salida:
Price: $7.50
Order ID: 00042
Color: #FF0000%.2f fuerza exactamente dos decimales, %05d rellena el entero con ceros hasta un ancho de 5, y %06X produce hexadecimal en mayúsculas relleno a 6 dígitos.
Intercambio de argumentos
Un especificador puede nombrar qué argumento usa mediante n$, de modo que puedes reutilizar un valor o reordenar argumentos sin cambiar la lista — útil para cadenas traducibles donde el orden de las palabras varía según el idioma:
<?php
printf('%1$s likes %2$s. %2$s likes %1$s too.', 'Ann', 'tea');
?>Salida:
Ann likes tea. tea likes Ann too.La familia printf
printf() pertenece a una familia de funciones que comparten exactamente la misma sintaxis de formato pero difieren en lo que hacen con el resultado:
sprintf()— devuelve la cadena formateada en lugar de imprimirla. Úsala cuando necesites almacenar o procesar más el resultado.vprintf()— comoprintf(), pero toma los valores como un único array (vprintf($format, $args)), útil cuando los argumentos ya están en un array.fprintf()— escribe la cadena formateada en un flujo/manejador de archivo en lugar de la salida estándar.
Para el formateo de números con configuración regional (separadores de miles, moneda), consulta number_format() en su lugar.
Cuándo usarlo
Recurre a printf() (o sprintf()) cuando importa el diseño de la salida: columnas alineadas, dinero con decimales fijos, identificadores con ceros a la izquierda o generación de cadenas como colores hexadecimales y URLs. Para salida simple donde el formato es irrelevante, echo es más simple y rápido.