sprintf

(PHP 3, 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.

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).
    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).

A partir de PHP 4.0.6, la cadena de formato soporta la numeración/intercambio de argumentos. He aquí un ejemplo:

Ejemplo 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:

Ejemplo 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:

Ejemplo 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:

Ejemplo 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);
?>

Vea también printf(), sscanf(), fscanf(), vsprintf(), y number_format().

Ejemplos

Ejemplo 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); // representacion binaria
printf("%%c = '%c'\n", $c); // imprime el caracter ascii, igual que la funcion chr()
printf("%%d = '%d'\n", $n); // representacion de entero estandar
printf("%%e = '%e'\n", $n); // notacion cientifica
printf("%%u = '%u'\n", $n); // representacion entera sin signo de un entero positivo
printf("%%u = '%u'\n", $u); // representacion entera sin signo de un entero negativo
printf("%%f = '%f'\n", $n); // representacion en punto flotante
printf("%%o = '%o'\n", $n); // representacion octal
printf("%%s = '%s'\n", $n); // representacion de cadena
printf("%%x = '%x'\n", $n); // representacion hexadecimal (minusculas)
printf("%%X = '%X'\n", $n); // representacion hexadecimal (mayusculas)

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

La salida de este programa 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 6. printf(): indicadores de cadena

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

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

La salida de este programa sería:

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

Ejemplo 7. sprintf(): enteros con relleno de ceros

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

Ejemplo 8. sprintf(): formato de valores monetarios

<?php
$dinero1
= 68.75;
$dinero2 = 54.35;
$dinero = $dinero1 + $dinero2;
// echo $dinero imprimiria "123.1";
$con_formato = sprintf("%01.2f", $dinero);
// echo $con_formato imprime "123.10"
?>

Ejemplo 9. sprintf(): notación científica

<?php
$numero
= 362525200;

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

Hosting by: hurra.com
Generated: 2007-01-26 18:01:06