Forum und email

sprintf

(PHP 4, PHP 5)

sprintf — Geeft een geformatteerde string weer

Beschrijving

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

Geeft een string weer die geproduceerd is volgens de formatting string format .

De format string bestaat uit nul of meer directives: normale karakters (uitgezonderd %) die rechtstreeks gekopieerd worden naar het resultaat, en conversie specificaties, die elk resulteren in het opvangen van zijn eigen parameter. Dit is van toepassing op sprintf() als wel printf().

Elke conversie specificatie bestaat uit een procent teken (%), gevolgd door een of meer van deze elementen, in volgorde:

  1. Een optionele padding specifier die bepaalt welk karakter er wordt gebruikt voor het padden van de resultaten naar de correcte string lengte. Dit kan een space karakter of een 0 (nul karakter) zijn. Een afwisselend padding karakter kan gespecificeerd worden door een enkele quote (') mee te geven. Zie de voorbeelden hieronder.
  2. Een optionele alignment specifier die vertelt of het resultaat links of rechts uitgelijnd moet worden. De default is rechts uitgelijnd; een - karakter kan gebruikt worden voor het links uitlijnen.
  3. Een optioneel nummer, een width specifier die vertelt hoeveel karakters (minimaal) in moet resulteren.
  4. Een optionele precision specifier die vertelt hoeveel decimale cijfers er moeten weergegeven voor floating-point getallen. Deze optie heeft geen effect op andere types dan double. (Een andere functie die nuttig is voor het formatteren van nummers is number_format().)
  5. Een type specifier die vertelt volgens welk type de argument data moet behandeld worden. Mogelijke types:

    • % - een literal procent karakter. Geen argument nodig.
    • b - het argument wordt behandeld als een integer, en gepresenteerd als een binair getal.
    • c - het argument wordt behandeld als een integer, en gepresenteerd als het karakter met die ASCII waarde.
    • d - het argument wordt behandeld als een integer, en gepresenteerd als een decimaal nummer.
    • f - het argument wordt behandeld als een double, en wordt gepresenteerd als een floating point nummer.
    • o - het argument wordt behandeld als een integer, and gepresenteerd als een octaal nummer.
    • s - het argument wordt behandeld als en gepresenteerd als een string.
    • x - het argument wordt behandeld als een integer en gepresenteerd als een hexadecimal number (met kleine letters).
    • X - het argument wordt behandeld als een integer en gepresenteerd als een hexadecimaal nummer (met hoofdletters).

Sinds PHP 4.0.6 wordt argument nummering/swapping ondersteund in de format string. Hier is een voorbeeld:

Example#1 Argument swapping

$format = "Er zijn %d apen in de %s";
printf($format,$num,$plaats);
Dit zou bijvoobeeld "Er zijn 5 apen in de boom" kunnen printen. Maar stel nou dat we de format strings in een apart bestand zetten, bijvoorbeeld omdat we het willen internationalizeren en we herschrijven het als:

Example#2 Argument swapping

$format = "In de %s zitten %d apen";
printf($format,$num,$plaats);
Nu hebben we een probleem. De volgorde van de placeholders in de format string komt niet overeen met de volgorde van de argumenten. We willen de code ongewijzigd houden en simpelweg aangeven naar welke argumenten de placeholders verwijzen. We kunnen dan de format string als volgt schrijven:

Example#3 Argument swapping

$format = "In de %2\$s zitten %1\$d apen";
printf($format,$num,$plaats);
En bijkomend voordeel is dat je de placeholders kan herhalen zonder meer argumenten in de code toe te voegen. Bijvoorbeeld:

Example#4 Argument swapping

$format = "In de %2\$s zitten %1\$d apen.
           Dat is een mooie %2\$s vol met %1\$s apen.";
printf($format,$num,$plaats);

Zie ook: printf(), sscanf(), fscanf(), en number_format().

Voorbeelden

Example#5 sprintf(): nul-padded integers

$isodate = sprintf("%04d-%02d-%02d", $jaar, $maand, $dag);

Example#6 sprintf(): formatteren van valuta-eenheden

$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money zal geven "123.1";
$formatted = sprintf ("%01.2f", $money);
// echo $formatted zal geven "123.10"