Funktion sprintf() - Strings formatiert ausgeben
Zu den häufigsten Vorgängen bei der Ausführung von PHP-Code ist die Ausgabe von strings am Bildschirm. Hierfür verwendet man in der Regel den echo-Befehl, der für einfache Ausgaben geeignet ist. Es gibt zwar noch den print-Befehl, dieser verhält sich jedoch fast wie echo und wird daher selten genutzt. Es kann vorkommen, dass die Ausgabe von strings formatiert erfolgen soll, z.B. wenn eine Fließkommazahl als eine Ganzzahl ausgegeben werden soll.
Damit man bei solchen Vorgängen vorher und nachher die Variablen nicht umwandeln muss, kann man die Funktion sprintf() verwenden. Diese verhält sich genauso wie die Funktion printf(), unterscheidet sich jedoch in einem wichtigen Punkt. Während bei printf() als Rückgabewert nur die Anzahl der Bytes zurückgegeben wird, gibt sprintf() als Rückgabewert die Zeichenkette zurück. Damit kann man die Zeichenkette in einer Variable speichern und weiter bearbeiten. Mit printf() ist das nicht möglich. Da die Funktionsweise von sprintf() ansonsten genauso ist wie printf() und die Funktion bereits unter printf() beschrieben wurde, sind nachfolgend lediglich einige Codebeispiele ohne nähere Erläuterung.
Code mit einer einfachen Anwendung der Funktion.
<?php
$zahl = 10.567;
// Ausgabe: Text mit der Zahl 10
sprintf('Text mit der Zahl %d', $zahl);
?>
Mehrere Argumente formatieren, z.B. $zahl1 mit %d und $zahl2 mit %F.
<?php
$zahl1 = 10.567;
$zahl2 = 10;
// Ausgabe: Text mit der Zahl 10 und 10.000000
sprintf('Text mit der Zahl %d und %F', $zahl1, $zahl2);
?>
Format-Spezifikator mit % bilden
Folgende Format-Spezifikatoren können genutzt werden.
- %% - Für die Ausgabe von Prozentzeichen.
- %b - Argument als Integer, binär ausgeben.
- %c - Argument als Integer, zugehöriges ASCII-Zeichen ausgeben.
- %d - Argument als Integer, als vorzeichenbehafteten Dezimalwert ausgeben.
- %e - Argument als wissenschaftliche Notation, z.B. 1.23456e+4.
- %E - Wie %e, nur mit E als Großbuchstabe, z.B. 1.23456E+4.
- %f - Argument als Fließkommazahl (abhängig von den locales).
- %F - Wie %f, nur unabhängig von den Einstellungen in den locales. Ab PHP 4.3.10 und 5.0.3.
- %g - Wie %e oder %f, je nachdem welche die kürzere ist.
- %G - Wie %E oder %f, je nachdem welche die kürzere ist.
- %o - Argument als Integer, oktal ausgeben.
- %s - Argument als string.
- %u - Argument als Integer, als positiven Dezimalwert ohne Vorzeichen ausgeben.
- %x - Argument als Integer, in Kleinbuchstaben als Hexadezimalwert ausgeben.
- %X - Wie %x, nur dass der Hexadezimalwert in Großbuchstaben ausgegeben wird.
Nachfolgend ein Beispielcode mit je einem Format-Spezifikator.
<?php
$zahl = 10.9;
// Ausgabe: Text nur mit %
sprintf('Text nur mit %%');
// Ausgabe: 1010, entspricht 10
sprintf('%b', $zahl);
// Ausgabe: A, entspricht ASCII-Wert 65
sprintf('%c', $zahl + 55);
// Ausgabe: -10, Zahl 10 * -1 = -10
sprintf('%d', $zahl * -1);
// Ausgabe: 1.090000e+1 entspricht 10.9
sprintf('%e', $zahl);
// Ausgabe: 1.090000e+1 entspricht 10.9
sprintf('%E', $zahl);
// Ausgabe: 10.000000
sprintf('%f', $zahl - 0.9);
// Ausgabe: 10.900000
sprintf('%F', $zahl);
// Ausgabe: 10.9
sprintf('%g', $zahl);
// Ausgabe: 5.45E+8
sprintf('%G', $zahl * 50000000.123456789);
// Ausgabe: 12, entspricht dezimal 10
sprintf('%o', $zahl);
// Ausgabe: 10.9
sprintf('%s', $zahl);
// Ausgabe: 18446744073709551606
sprintf('%u', $zahl * -1);
// Ausgabe: a, entspricht 10
sprintf('%x', $zahl);
// Ausgabe: A, entspricht 10
sprintf('%X', $zahl);
?>
Vorzeichen mit + anzeigen.
<?php
$zahl = 10.9;
// Ausgabe: +10
sprintf('%+d', $zahl);
?>
Mit führenden Nullen versehen. Andere Zeichen mit \' oder nur mit ' maskieren.
<?php
$zahl = 10.9;
// Ausgabe: +0010
sprintf('%+05d', $zahl);
// Ausgabe: 00010
sprintf('%05d', $zahl);
// Ausgabe: 10 (mit 5 Leerzeichen)
sprintf('% 5d', $zahl);
// Ausgabe: 10 (mit 5 Leerzeichen)
sprintf('%5d', $zahl);
// Ausgabe: ***10
sprintf('%\'*5d', $zahl);
// Ausgabe: AAA10
sprintf('%\'A5d', $zahl);
// Ausgabe: AAA10
sprintf("%'A5d", $zahl);
?>
Nachkommastellen festlegen.
<?php
$zahl = 10.9;
// Ausgabe: +10.900
sprintf('%+.3f', $zahl);
// Ausgabe: 10.900
sprintf('%.3f', $zahl);
// Ausgabe: 10.90000000
sprintf('%.8f', $zahl);
// Ausgabe: 010.900
sprintf('%07.3f', $zahl);
$text = 'Zeichenkette';
// Ausgabe 0000Zei
sprintf('%07.3s', $text);
?>
Reihenfolge der Argumente mit $ festlegen.
<?php
$a = 10.5;
$b = 20.5;
$c = 30.5;
$d = 40.5;
// Ausgabe: 10 20 30 40
sprintf('%d %d %d %d', $a, $b, $c, $d);
// Ausgabe: 40 30 20 10
sprintf('%4$d %3$d %2$d %1$d', $a, $b, $c, $d);
?>
Rückgabewert der Funktion sprintf
In diesem Punkt unterscheidet sich die Funktion gegenüber printf(). Als Rückgabewert erhält man die Zeichenkette.
<?php
$a = 'ä';
$b = 'ö';
$c = 'ü';
$d = 'ß';
// Ausgabe: ä ö ü ß
$ergebnis = sprintf('%s %s %s %s', $a, $b, $c, $d);
// Ausgabe ä ö ü ß
echo $ergebnis;
?>
Da die Funktionen im Grunde identisch sind, wird in der Praxis aufgrund des Rückgabewerts meistens sprintf() verwendet.