Cadenas
PHP Manual

sprintf

(PHP 4, PHP 5)

sprintf — Devuelve una cadena con formato

Descripción

string sprintf ( string $formato [, mixed $args [, mixed $... ]] )

Devuelve una cadena producida de acuerdo con la cadena de formato formato .

Lista de parámetros

formato

La cadena de formato se compone de cero o más directivas: caracteres ordinarios (excluyendo %) que son copiados directamente en el resultado, y unas especificaciones de conversión, cada una de las cuales produce una búsqueda por su propio parámetro. Esto se aplica tanto en sprintf() como en printf().

Cada especificación de conversión consiste de un signo de porcentaje (%), seguido por uno o más de los siguientes elementos, en orden:

  1. Un indicador de signo opcional que obliga a que se use un determinado signo (- o +) en un número. De forma predeterminada, sólo el signo - es usado en un número si éste es negativo. Este indicador obliga a los números positivos a que tengan también el signo + adjunto, comportamiento que se agregó en PHP 4.3.0.
  2. Un indicador de relleno opcional, que dice qué caracter será usado para adaptar el resultado al tamaño de cadena apropiado. Este puede ser un caracter de espacio, o un 0 (caracter cero). El comportamiento predeterminado es rellenar con espacios. Un caracter de relleno alternativo puede especificarse al colocar una comilla sencilla (') al comienzo. Vea los ejemplos más adelante.
  3. Un indicador de alineamiento opcional que dice si el resultado debe alinearse a la izquierda o a la derecha. El comportamiento predeterminado es alinear a la derecha; un caracter - en este lugar hace que la alineación sea a la izquierda.
  4. Un número opcional, un indicador de ancho que dice cuántos caracteres (como mínimo) debe producir la conversión.
  5. Un indicador de precisión opcional que dice cuántos dígitos decimales deben mostrarse para los números de punto flotante. Cuando se usa este indicador con una cadena, actúa como un punto de corte, indicando un límite máximo de caracteres para la cadena.
  6. Un indicador de tipo que especifica el tipo bajo el que deben tratarse los datos del argumento. Los posibles tipos son:

    • % - un caracter de porcentaje literal. No requiere argumento.
    • b - el argumento es tratado como un entero, presentado como un número binario.
    • c - el argumento es tratado como un entero, y presentado como el caracter con ese valor ASCII.
    • d - el argumento es tratado como un entero, y presentado como un número decimal (con signo).
    • e - el argumento es tratado como notación científica (p.ej. 1.2e+2). El especificador de precisión indica el número de dígitos después del punto decimal a partir de PHP 5.2.1. En versiones anteriores, era tomado como el número de dígitos significativos (uno menos).
    • u - el argumento es tratado como un entero, y presentado como un número decimal sin signo.
    • f - el argumento es tratado como un flotante, y presentado como un número de punto flotante (teniendo en cuenta la localidad).
    • F - el argumento es tratado como un flotante, y presentado como un número de punto flotante (no tiene en cuenta la localidad). Disponible desde PHP 4.3.10 y PHP 5.0.3.
    • o - el argumento es tratado como un entero, y presentado como un número octal.
    • s - el argumento es tratado y presentado como una cadena.
    • x - el argumento es tratado como un entero y presentado como un número hexadecimal (con letras minúsculas).
    • X - el argumento es tratado como un entero y presentado como un número hexadecimal (con letras mayúsculas).

La cadena de formato soporta la numeración/intercambio de argumentos. He aquí un ejemplo:

Example#1 Intercambio de argumentos

<?php
$formato 
'Hay %d monos en el %s';
printf($formato$num$ubicacion);
?>
Esto podría imprimir, "Hay 5 monos en el árbol". Pero imagine que creamos una cadena de formato en un archivo separado, generalmente por que queremos implementar un mecanismo de internacionalización, y re-escribimos el código:

Example#2 Intercambio de argumentos

<?php
$formato 
'El %s contiene %d monos';
printf($formato$num$ubicacion);
?>
Ahora tenemos un problema. El orden de los recipientes en la cadena de formato no coincide con el orden de los argumentos en el código. Quisiéramos dejar el código tal como está, y simplemente indicar en la cadena de formato cuáles argumentos están siendo referidos por los recipientes. Entonces re-escribiríamos la cadena de formato de esta forma:

Example#3 Intercambio de argumentos

<?php
$formato 
'El %2$s contiene %1$d monos';
printf($formato$num$ubicacion);
?>
Un beneficio adicional de esto es que puede repetir los recipientes sin agregar más argumentos en el código. Por ejemplo:

Example#4 Intercambio de argumentos

<?php
$formato 
'El %2$s contiene %1$d monos.
            Se trata de un bonito %2$s lleno con %1$d monos.'
;
printf($formato$num$ubicacion);
?>

args

...

Valores retornados

Devuelve una cadena producida de acuerdo a la cadena de formato formato .

Registro de cambios

Versión Descripción
4.0.6 Se agregó el soporte para el intercambio y la numeración de argumentos

Ejemplos

Example#5 printf(): ejemplos varios

<?php
$n 
=  43951789;
$u = -43951789;
$c 65// el valor ASCII 65 es 'A'

// note el doble %%, esto imprime un caracter '%' literal
printf("%%b = '%b'\n"$n); // representación binaria
printf("%%c = '%c'\n"$c); // imprime el caracter ascii, igual que la función chr()
printf("%%d = '%d'\n"$n); // representación de entero estándar
printf("%%e = '%e'\n"$n); // notación científica
printf("%%u = '%u'\n"$n); // representación entera sin signo de un entero positivo
printf("%%u = '%u'\n"$u); // representación entera sin signo de un entero negativo
printf("%%f = '%f'\n"$n); // representación en punto flotante
printf("%%o = '%o'\n"$n); // representación octal
printf("%%s = '%s'\n"$n); // representación de cadena
printf("%%x = '%x'\n"$n); // representación hexadecimal (minúsculas)
printf("%%X = '%X'\n"$n); // representación hexadecimal (mayúsculas)

printf("%%+d = '%+d'\n"$n); // indicador de signo en un entero positivo
printf("%%+d = '%+d'\n"$u); // indicador de signo en un entero negativo
?>

El resultado del ejemplo seria:

%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'

Example#6 printf(): indicadores de cadena

<?php
$s 
'mono';
$t 'varios monos';

printf("[%s]\n",      $s); // salida de cadena estándar
printf("[%10s]\n",    $s); // alineación a derecha con espacios
printf("[%-10s]\n",   $s); // alineación a izquierda con espacios
printf("[%010s]\n",   $s); // el relleno con ceros funciona con cadenas también
printf("[%'#10s]\n",  $s); // usar el caracter de relleno '#'
printf("[%10.10s]\n"$t); // alineación a izquierda pero con un corte de 10 caracteres
?>

El resultado del ejemplo seria:

[mono]
[      mono]
[mono      ]
[000000mono]
[######mono]
[varios mon]

Example#7 sprintf(): enteros con relleno de ceros

<?php
$fecha_iso 
sprintf("%04d-%02d-%02d"$anyo$mes$dia);
?>

Example#8 sprintf(): formato de valores monetarios

<?php
$dinero1 
68.75;
$dinero2 54.35;
$dinero $dinero1 $dinero2;
// echo $dinero imprimiría "123.1";
$con_formato sprintf("%01.2f"$dinero);
// echo $con_formato imprime "123.10"
?>

Example#9 sprintf(): notación científica

<?php
$numero 
362525200;

echo 
sprintf("%.3e"$numero); // imprime 3.625e+8
?>

Ver también


Cadenas
PHP Manual