sprintf

(PHP 3, PHP 4 , PHP 5)

sprintf -- Returner en formateret streng

Beskrivelse

string sprintf ( string format [, mixed args])

Returnerer en streng produceret af specifikationerne givet i format.

Formateringsstrengen bliver dannet af ingen eller flere direktiver: ordinære tegn (eksklusiv %) som bliver kopieret direkte til resultatet og konverteringsspecifikationer, hvert resulterer i at fange dets eget parameter. Dette gælder for både sprintf() og printf().

Hver konverteringspecifikation består af et procenttegn (%), fulgt af et eller flere af disse elementer, i rækkefølge:

  1. En valgfri padding specifier som fortæller hvilken karakter der skal bruges til at udfylde resultaterne til den korrekte strengstørrelse. Der kan bruges et mellemrum eller et 0 (nultegn). Standarden er at udfylde med mellemrum. Et alternativ udfyldningstegn kan blive specificeret ved præfikse dem med et enkelt citationstegn ('). Se eksemplerne herunder.

  2. En valgfrialignment specifier som siger om resultatet skal være venstrestillet eller højrestillet. Standarden er højrestillet; et - tegn her vil gøre det venstrestillet.

  3. Et valgfrit tal, en width specifier som fortæller hvor mange tegn (minimum) denne konvertering skal resultere i.

  4. En valgfri precision specifier som fortæller hvor mange decimalcifre der skal vises som flydende decimalnumre. Når man bruger specifier på en streng, opfører den sig som et afskæringspunkt, der sætter den maksimale tegngrænse på strengen.

  5. En type specificerer som fortæller hvilken type parameterdataene skal behandles som. Mulige typer:

    % - et procenttegn. Intet parameter er påkrævet.
    b - parametret bliver behandlet som et heltal og præsenteret som et binært tal.
    c - parametret bliver behandlet som et heltal og præsenteret som et tegn med den ASCII-værdi.
    d - parametret bliver behandlet som et heltal og præsenteret som et (signeret) decimaltal.
    e - parametret bliver behandlet som et videnskabeligt tegnsystem (eks. 1.2e+2).
    u - parametret bliver behandlet som et heltal og præsenteret som et usigneret decimaltal.
    f - parametret bliver behandlet som et float, og præsenteret som et flydende decimaltal.
    o - parametret bliver behandlet som et heltal og præsenteret som et oktaltal.
    s - parametret bliver behandlet og præsenteret som en streng.
    x - parametret bliver behandlet som et heltal og præsenteret som et hexadecimaltal (med små bogstaver).
    X - parametret bliver behandlet som et heltal og præsenteret som et hexadecimaltal (med store bogstaver).

Siden PHP 4.0.6 understøtter formateringsstrengen parameternummering/ombytning. Her er et eksempel:

Eksempel 1. Parameterombytning

<?php
$format
= "Der er %d aber i %s";
printf($format, $num, $location);
?>
Dette kunne udskrive, "Der er 5 aber i træet". Men forestil dig at vi skaber en formateringsstreng i en seperat fil, sædvanligvis fordi vi ville internationalisere den og omskrive den således:

Eksempel 2. Parameterombytning

<?php
$format
= "%s indeholder %d aber";
printf($format, $num, $location);
?>
Vi har nu et problem. Rækkefølgen af pladsholderne i formateringsstrengen matcher ikke rækkefølgen på parametrene i koden. Vi kunne godt tænke os at efterlade koden som den er og simpelthen indikere i formateringsstrengen hvilke parametre pladsholderne skal referere til. Vi ville skrive formateringsstrengen sådan her i stedet:

Eksempel 3. Parameterombytning

<?php
$format
= "%2\$s indeholder %1\$d aber";
printf($format, $num, $location);
?>
En tilføjet fordel her er at du kan gentage pladsholderne uden af tilføje flere argumenter i koden. For eksempel:

Eksempel 4. Parameterombytning

<?php
$format
= "%2\$s indeholder %1\$d aber.
           Det er et rart %2\$s fuldt af %1\$d aber."
;
printf($format, $num, $location);
?>

Se også printf(), sscanf(), fscanf(), vsprintf(), og number_format().

Eksempler

Eksempel 5. printf(): forskellige eksempler

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

// bemærk de dobbelte %%, de udkskriver et enkelt '%'
printf("%%b = '%b'\n", $n); // binær præsentation
printf("%%c = '%c'\n", $c); // print asciitegnet, samme som chr()
function
printf("%%d = '%d'\n", $n); // standard heltalspræsentation
printf("%%e = '%e'\n", $n); // videnskabelig tegnsætning
printf("%%u = '%u'\n", $n); // usigneret heltalspræsentation af et positivt
heltal
printf
("%%u = '%u'\n", $u); // usigneret heltalspræsentation af et negativt
heltal
printf
("%%f = '%f'\n", $n); // kommatalspræsentation
printf("%%o = '%o'\n", $n); // oktal præsentation
printf("%%s = '%s'\n", $n); // strengpræsentation
printf("%%x = '%x'\n", $n); // hexadecimal præsentation (små bogstaver)
printf("%%X = '%X'\n", $n); // hexadecimal præsentation (store bogstaver)
?>

Resultatet af dette program ville være:

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

Eksempel 6. printf(): strengspecifikatorer

<?php
$s
= 'abe';
$t = 'rigtigt mange aber';

printf("[%s]\n",      $s); // standard strengudskrift
printf("[%10s]\n",    $s); // højrestillet med mellemrum
printf("[%-10s]\n",   $s); // venstrestillet med mellemrum
printf("[%010s]\n",   $s); // nuludfyldning virker også på strenge
printf("[%10.10s]\n", $t); // venstrestillet, men afskåret ved 10 tegn
?>

Resultatet af dette program ville være:

[abe]
[       abe]
[abe       ]
[0000000abe]
[rigtige ma]

Eksempel 7. sprintf(): nuludfyldte heltal

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

Eksempel 8. sprintf(): formater valuta

<?php
$money1
= 68.75;
$formatted = sprintf("%01.2f", $money1); // echo $formatted ville udskrive
"123.10"
?>

Eksempel 9. sprintf(): videnskabeligt tegnsystem

<?php
$number
= 362525200;
echo
sprintf("%.3e", $number); // udskriver 3.63e+8
?>