Forum und email

sprintf

(PHP 4, PHP 5)

sprintf — Returner en formateret streng

Beskrivelse

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

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 tegn specifikator som tvinger et tegn (- eller +) til at blive brugt som et tal. Som standard bliver kun "-" brugt på et tal hvis det er negativt. Specifikatøren tvinger positive tal til at have et +-tegn påklistret også, og blev tilføjet i PHP 4.3.0
  2. 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.
  3. 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.
  4. Et valgfrit tal, en width specifier som fortæller hvor mange tegn (minimum) denne konvertering skal resultere i.
  5. 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.
  6. 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 kommatal, og præsenteret som et flydende decimaltal (lokal kendt).
    • F - parametret bliver behandlet som et kommatal, og præsenteret som et flydende decimaltal (lokal ukendt).
    • 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:

Example#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:

Example#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:

Example#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:

Example#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

Example#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)

printf("%%+d = '%+d'\n"$n); // tegnspecifikator på et positivt heltal
printf("%%+d = '%+d'\n"$u); // tegnspecifikator på et negativt heltal
?>

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'
%+d = '+43951789'
%+d = '-43951789'

Example#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("[%'#10s]\n",  $s); // brug det normale udfyldningstegn '#'
printf("[%10.10s]\n"$t); // venstrestillet, men afskåret ved 10 tegn
?>

Resultatet af dette program ville være:

[abe]
[       abe]
[abe       ]
[0000000abe]
[#######abe]
[rigtigt ma]

Example#7 sprintf(): nuludfyldte heltal

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

Example#8 sprintf(): formater valuta

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

Example#9 sprintf(): videnskabeligt tegnsystem

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