Menu

PHP sprintf(): Strings formatieren, Padding, Dezimalen

sprintf() baut einen String aus einem Format und Werten: sprintf('%05.2f', 3.14159) liefert "03.14". Hier: %s, %d und %f, Auffüllen mit Nullen, feste Nachkommastellen, Ausrichtung, nummerierte Argumente, printf und vsprintf.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

sprintf() liefert einen String, der aus einem Format und einer Liste von Werten gebaut wird: Jeder %-Platzhalter im Format wird durch den nächsten Wert ersetzt. sprintf('%s is %d years old', 'Ada', 36) liefert "Ada is 36 years old". printf() nimmt dieselben Argumente, gibt das Ergebnis aber aus, statt es zurückzugeben.

Die Platzhalter werden der Reihe nach von links nach rechts gefüllt. %.2f zeigt immer zwei Nachkommastellen (4.50, nicht 4.5), und %05d füllt die Zahl mit Nullen auf fünf Stellen auf.

Die Formatangaben

Ein Platzhalter besteht aus %, optionalen Modifikatoren und dann einem Buchstaben für den Typ:

AngabeBedeutungsprintf(...)Ergebnis
%sStringsprintf('%s', 'PHP')PHP
%dGanzzahl (mit Vorzeichen)sprintf('%d', 42.9)42
%fFloat, standardmäßig 6 Nachkommastellensprintf('%f', 1.5)1.500000
%.2fFloat, 2 Nachkommastellensprintf('%.2f', 1.5)1.50
%ewissenschaftliche Schreibweisesprintf('%e', 1234.5678)1.234568e+3
%x / %Xhexadezimalsprintf('%x', 255)ff
%ooktalsprintf('%o', 8)10
%bbinärsprintf('%b', 5)101
%cZeichen aus einem Codesprintf('%c', 65)A
%uGanzzahl ohne Vorzeichensprintf('%u', 3)3
%%ein wörtliches Prozentzeichensprintf('%d%%', 50)50%

Ändere die Werte unten und führe den Code erneut aus:

%d schneidet einen Float in Richtung null ab, also wird 42.9 zu 42. Wenn du 43 willst, rundest du vorher: sprintf('%d', round(42.9)). Ein String, der keine Zahl ist, etwa 'abc', wird unter %d zu 0.

Mit führenden Nullen auffüllen

Zwischen % und den Buchstaben kannst du ein Füllzeichen und eine Breite setzen. %05d bedeutet „mit 0 auf eine Breite von 5 auffüllen“. So formatiert man üblicherweise Bestellnummern, Rechnungs-IDs, Uhrzeiten und Datumsangaben.

Die Breite ist ein Minimum. Eine Zahl, die länger als die Breite ist, wird vollständig ausgegeben.

%05.2f: Breite und Nachkommastellen zusammen

Bei Floats zählt die Breite jedes Zeichen des Ergebnisses, auch den Dezimalpunkt und das Minuszeichen. Deshalb ergibt %05.2f bei 3.14159 den Wert 03.14: insgesamt fünf Zeichen, zwei davon nach dem Punkt.

%f verwendet den Dezimalpunkt der aktuellen Locale (gesetzt mit setlocale()), während %F immer einen Punkt verwendet. Wenn dein Code eine Locale setzt und du für JSON, CSV oder eine API einen Punkt brauchst, verwende %F.

Text in Spalten ausrichten

Eine positive Breite richtet rechtsbündig aus, ein - vor der Breite linksbündig, und ' gefolgt von einem Zeichen setzt ein eigenes Füllzeichen. Zusammen bringen sie Textberichte und Kassenbons in Reih und Glied.

%-14s füllt den Artikelnamen rechts auf 14 Zeichen auf, %8.2f richtet den Preis rechtsbündig in 8 Zeichen aus, und %'-27s mit einem leeren String gibt eine Linie aus 27 Bindestrichen aus. %'*10s füllt mit * statt mit Leerzeichen auf.

Argumente nummerieren, um sie wiederzuverwenden oder umzuordnen

%1$s bedeutet „das erste Argument als String“, %2$d „das zweite als Ganzzahl“. Mit nummerierten Platzhaltern kannst du einen Wert zweimal verwenden oder die Reihenfolge ändern, ohne die Argumentliste zu ändern, und das brauchen Übersetzer, wenn sich die Wortstellung zwischen Sprachen unterscheidet.

vsprintf, printf und die Rückgabewerte

vsprintf() nimmt die Werte als ein Array, was praktisch ist, wenn sie schon in einem Array stehen. printf() liefert die Anzahl der ausgegebenen Bytes, und vprintf() ist die Array-Version von printf().

Die Zahl von printf() schließt den Zeilenumbruch ein, also sind "Hello\n" 6 Bytes. Bei Multibyte-Text zählt sie Bytes, nicht Zeichen.

Zu wenige Argumente werfen einen Fehler

Seit PHP 8 wirft ein Format mit mehr Platzhaltern als Werten einen ArgumentCountError, statt false zu liefern. Zähle die %-Platzhalter (ohne %%), wenn du diesen Fehler siehst.

Die Meldung zählt den Format-String als Argument mit: ArgumentCountError: 4 arguments are required, 3 given. Überzählige Argumente werden still ignoriert, also zeigt sich der umgekehrte Fehler nicht als Fehler. Wenn ein Ergebnis von sprintf falsch aussieht, gib das Format neben den Werten aus. Wenn du nur ein Tausendertrennzeichen brauchst, ist number_format() einfacher, als eines mit sprintf zu bauen. Die vollständige Liste der Modifikatoren steht auf php.net.

Häufig gestellte Fragen

Wie füge ich in PHP führende Nullen zu einer Zahl hinzu?

Mit sprintf('%05d', 42), das "00042" liefert. Die 0 ist das Füllzeichen und 5 die Gesamtbreite. Bei einem String liefert str_pad('42', 5, '0', STR_PAD_LEFT) dasselbe Ergebnis.

Wie formatiere ich mit sprintf eine Zahl auf 2 Nachkommastellen?

Mit %.2f: sprintf('%.2f', 3.14159) liefert "3.14" und sprintf('%.2f', 5) liefert "5.00". Füge eine Breite hinzu, um zusätzlich aufzufüllen: %08.2f ergibt "00003.14".

Was ist der Unterschied zwischen printf und sprintf in PHP?

sprintf() liefert den formatierten String, damit du ihn speichern kannst. printf() gibt ihn sofort aus und liefert die Anzahl der ausgegebenen Bytes. echo sprintf(...) und printf(...) erzeugen dieselbe Ausgabe.

Was bedeutet %s in PHP?

%s ist ein Platzhalter für einen String in sprintf() und printf(): sprintf('Hello, %s', 'Ada') liefert "Hello, Ada". Zahlen, die an %s übergeben werden, werden in Strings umgewandelt. %d ist für Ganzzahlen und %f für Floats.

Wie verwende ich in sprintf dasselbe Argument zweimal?

Nummeriere die Platzhalter: sprintf('%1$s loves %2$s, and %2$s loves %1$s', 'Ada', 'PHP'). Setze das Format in einfache Anführungszeichen: In doppelten liest PHP $s als Variable, also wird "%1$s" zu %1, gefolgt vom Wert von $s.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S