Funciones de strings
PHP Manual

sprintf

(PHP 4, PHP 5)

sprintfDevuelve un string formateado

Descripción

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

Devuelve un string producido de acuerdo con el string format.

Parámetros

format

El string de formato está compuesto de cero o más directivas: caracteres ordinarios (excluyendo %) que son copiados directamente al resultado y especificaciones de conversión, cada una de las cuales da lugar a extraer su propio parámetro. Esto aplica tanto para sprintf() como printf().

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

  1. Un especificador de signo opcional que fuerza un signo (- ó +) a ser utilizado en un número. Por defecto, sólo el signo - se utiliza en un número si es negativo. Esta especificación fuerza números positivos para que también tengan adjunto el signo + y fue agregada en PHP 4.3.0.
  2. Un especificador de relleno opcional que indica qué carácter se utiliza para rellenar el resultado hasta el tamaño correcto de string. Este puede ser un caracter de espacio o un 0 (el caracter cero). El valor por defecto es rellenar con espacios. Un caracter de relleno alternativo se puede especificar colocándole un prefijo de una comilla simple ('). Ver los ejemplos mas adelante.
  3. Un especificador de alineación opcional que indica si el resultado debe ser alineado a la izquierda o a la derecha. El valor por defecto es justificado a la derecha, un caracter - aquí lo hará justificado a la izquierda.
  4. Un número opcional, un especificador de ancho que dice cuantos caracteres (como mínimo) debe producir esta conversión.
  5. Un especificador de precisión opcional en la forma de un punto (`.') seguido de un string opcional de dígitos decimales que indica cuántos dígitos decimales deben mostrarse para los números de punto flotante. Cuando se utiliza este especificador con un string, actúa como un punto de corte, estableciendo un límite máximo de caracteres al string.
  6. Un especificador de tipo que indica como que tipo deben ser tratados los datos del argumento. Los tipos posibles son:

    • % - un caracter de porcentaje literal. No se requiere argumento.
    • b - el argumento es tratado como un integer y presentado como un número binario.
    • c - el argumento es tratado como un integer y presentado como el caracter con ese valor ASCII.
    • d - el argumento es tratado como un integer y presentado como un número decimal (con signo).
    • e - el argumento es tratado como notación científica (e.g. 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, se tomó como el número de dígitos significativos (uno menos).
    • E - como %e pero utiliza la letra mayúscula (e.g. 1.2E+2).
    • u - el argumento es tratado como un integer y presentado como un número decimal sin signo.
    • f - el argumento es tratado como un float y presentado como un número de punto flotante (consciente de la configuración regional).
    • F - el argumento es tratado como un float y presentado como un número de punto flotante (no consciente de la configuración regional). Disponible desde PHP 4.3.10 y PHP 5.0.3.
    • g - más corto de %e y %f.
    • G - más corto de %E y %f.
    • o - el argumento es tratado como un integer y presentado como un número octal.
    • s - el argumento es tratado y presentado como un string.
    • x - el argumento es tratado como un integer y presentado como un número hexadecimal (con las letras en minúsculas).
    • X - el argumento es tratado como un integer y presentado como un número hexadecimal (con las letras en mayúsculas).

El string de formato soporta numeración/intercambio de argumentos. Aquí está un ejemplo:

Ejemplo #1 Intercambio de argumentos

<?php
$num 
5;
$location 'tree';

$format 'There are %d monkeys in the %s';
echo 
sprintf($format$num$location);
?>
Esto producirá "There are 5 monkeys in the tree". Pero imaginemos que estamos creando un string de formato en un archivo separado, generalmente por que nos gustaría internacionalizarlo y lo reescribimos así:

Ejemplo #2 Intercambio de argumentos

<?php
$format 
'The %s contains %d monkeys';
echo 
sprintf($format$num$location);
?>
Ahora tenemos un problema. El orden de los marcadores de posición en el string de formato no coincide con el orden de los argumentos en el código. Nos gustaría dejar el código tal cual y simplemente indicar en el string de formato a cuáles argumentos de los marcadores de posición se refieren. Tendríamos que escribir el string de formato de esta forma:

Ejemplo #3 Intercambio de argumentos

<?php
$format 
'The %2$s contains %1$d monkeys';
echo 
sprintf($format$num$location);
?>
Un beneficio adicional aquí, es que se pueden repetir los marcadores de posición sin agregar más argumentos en el código. Por ejemplo:

Ejemplo #4 Intercambio de argumentos

<?php
$format 
'The %2$s contains %1$d monkeys.
           That\'s a nice %2$s full of %1$d monkeys.'
;
echo 
sprintf($format$num$location);
?>
Cuando se utiliza intercambio de argumentos, el especificador de posición n$ debe venir inmediatamente después del signo de porcentaje (%), antes de cualquier otro especificador, tal como se muestra en el ejemplo siguiente.

Ejemplo #5 Especificador de posición con otros especificadores

<?php
$format 
'The %2$s contains %1$04d monkeys';
echo 
sprintf($format$num$location);
?>

El resultado del ejemplo sería:

The tree contains 0005 monkeys

Nota:

Tratar de utilizar marcadores de posición mayores que PHP_INT_MAX provocará que sprintf() lance mensajes de advertencia.

args

...

Valores devueltos

Devuelve un string producido de acuerdo con el string de formato format.

Historial de cambios

Versión Descripción
4.0.6 Fue agregado el soporte para numeración/intercambio de argumentos

Ejemplos

Ejemplo #6 printf(): ejemplos varios

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

// fijarse en el doble %%, esto muestra un caracter '%' literal
printf("%%b = '%b'\n"$n); // representación binaria
printf("%%c = '%c'\n"$c); // muestra el caracter ascii, igual que la función chr()
printf("%%d = '%d'\n"$n); // representación estándar de un entero
printf("%%e = '%e'\n"$n); // notación científica
printf("%%u = '%u'\n"$n); // representación sin signo de un entero positivo
printf("%%u = '%u'\n"$u); // representación sin signo de un entero negativo
printf("%%f = '%f'\n"$n); // representación de punto flotante
printf("%%o = '%o'\n"$n); // representación octal
printf("%%s = '%s'\n"$n); // representación en una 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); // especificador de signo sobre un entero positivo
printf("%%+d = '%+d'\n"$u); // especificador de signo sobre un entero negativo
?>

El resultado del ejemplo sería:

%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'

Ejemplo #7 printf(): especificadores de string

<?php
$s 
'monkey';
$t 'many monkeys';

printf("[%s]\n",      $s); // salida estándar de string 
printf("[%10s]\n",    $s); // justificación a la derecha con espacios
printf("[%-10s]\n",   $s); // justificación a la izquierda con espacios
printf("[%010s]\n",   $s); // rellenado con ceros también funciona sobre strings
printf("[%'#10s]\n",  $s); // utiliza el caracter de relleno personalizado '#'
printf("[%10.10s]\n"$t); // justificación a la izquierda pero con un corte a los 10 caracteres
?>

El resultado del ejemplo sería:

[monkey]
[    monkey]
[monkey    ]
[0000monkey]
[####monkey]
[many monke]

Ejemplo #8 sprintf(): rellenado con ceros en integers

<?php
$isodate 
sprintf("%04d-%02d-%02d"$year$month$day);
?>

Ejemplo #9 sprintf(): formato de moneda

<?php
$money1 
68.75;
$money2 54.35;
$money $money1 $money2;
// echo $money producirá "123.1";
$formatted sprintf("%01.2f"$money);
// echo $formatted producirá "123.10"
?>

Ejemplo #10 sprintf(): notación científica

<?php
$number 
362525200;

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

Ver también


Funciones de strings
PHP Manual