W3docs

printf()

Artikel über die PHP-Funktion printf(), die zur Ausgabe eines formatierten Strings verwendet wird. Ähnlich wie echo(), aber mit mehr Kontrolle.

Die PHP-Funktion printf() gibt einen nach einer Vorlage formatierten String aus. Anders als echo, das Werte einfach zusammenfügt und unverändert ausgibt, ermöglicht printf() die genaue Steuerung, wie jeder Wert erscheint — Breite, Nachkommastellen, Auffüllung, Vorzeichen und Zahlenbasis —, indem Formatspezifizierer (Platzhalter wie %s oder %.2f) in einen Formatstring eingefügt werden. Dies ist das richtige Werkzeug, wenn das Layout der Ausgabe eine Rolle spielt: ausgerichtete Tabellen, Geldbeträge mit zwei Dezimalstellen, nullaufgefüllte IDs oder Hex-Farbcodes.

Diese Seite behandelt die Syntax, den Aufbau eines Formatspezifizierers, die häufigsten Konvertierungen mit ausführbaren Beispielen sowie die eng verwandten Funktionen derselben Familie.

Syntax

printf(string $format, mixed ...$values): int
  • $format — ein Vorlagen-String mit literalem Text und einem oder mehreren Formatspezifizierern.
  • $values — die in die Spezifizierer eingesetzten Werte, in der angegebenen Reihenfolge.
  • Gibt die Anzahl der geschriebenen Zeichen zurück (die Länge der Ausgabe), nicht den String selbst. printf() gibt direkt in die Ausgabe aus. Wenn stattdessen der formatierte String zurückgegeben werden soll, verwende sprintf().

Ein einfaches Beispiel

php— editable, runs on the server

%s wird durch das erste Argument ($name) als String ersetzt, %d durch das zweite ($age) als vorzeichenbehaftete Ganzzahl. Die Ausgabe lautet:

My name is John Doe and I am 35 years old.

Aufbau eines Formatspezifizierers

Jeder Spezifizierer beginnt mit % und kann optionale Teile in dieser Reihenfolge enthalten:

%[argnum$][flags][width][.precision]specifier
  • flags — z. B. 0 (mit Nullen auffüllen), - (linksbündig ausrichten), + (Vorzeichen immer anzeigen), ' ' (ein Leerzeichen füllt mit diesem Zeichen auf).
  • width — die minimale Anzahl von Zeichen, die das Feld einnimmt.
  • .precision — bei Gleitkommazahlen die Anzahl der Stellen nach dem Dezimalzeichen; bei Strings die maximale Länge.
  • specifier — der Konvertierungstyp (siehe unten).

Um ein literales Prozentzeichen auszugeben, muss es als %% maskiert werden.

Häufige Konvertierungsspezifizierer

SpezifiziererKonvertiert das Argument in
%seinen String
%deine vorzeichenbehaftete Dezimalzahl
%feine Gleitkommazahl
%bBinär
%oOktal
%x / %XKlein- / Großbuchstaben-Hexadezimal
%eWissenschaftliche Notation
%%ein literales %

Breite, Genauigkeit und Auffüllung

Hier zeigt printf() seinen wahren Nutzen. Das folgende Beispiel formatiert einen Preis auf zwei Dezimalstellen, füllt eine ID mit Nullen auf 5 Stellen auf und stellt eine Zahl als Hex-Farbe dar:

<?php
$price = 7.5;
$id = 42;
$color = 16711680; // red

printf("Price: $%.2f\n", $price);
printf("Order ID: %05d\n", $id);
printf("Color: #%06X\n", $color);
?>

Ausgabe:

Price: $7.50
Order ID: 00042
Color: #FF0000

%.2f erzwingt genau zwei Dezimalstellen, %05d füllt die Ganzzahl mit Nullen auf eine Breite von 5 auf, und %06X erzeugt Großbuchstaben-Hex mit 6 Stellen.

Argumentvertauschung

Ein Spezifizierer kann mit n$ angeben, welches Argument er verwendet, sodass ein Wert wiederverwendet oder Argumente neu geordnet werden können, ohne die Liste zu ändern — praktisch für übersetzbare Strings, bei denen die Wortstellung je nach Sprache unterschiedlich ist:

<?php
printf('%1$s likes %2$s. %2$s likes %1$s too.', 'Ann', 'tea');
?>

Ausgabe:

Ann likes tea. tea likes Ann too.

Die printf-Familie

printf() gehört zu einer Familie von Funktionen, die dieselbe Formatsyntax teilen, sich aber darin unterscheiden, was sie mit dem Ergebnis tun:

  • sprintf()gibt den formatierten String zurück, anstatt ihn auszugeben. Verwende es, wenn das Ergebnis gespeichert oder weiterverarbeitet werden soll.
  • vprintf() — wie printf(), übernimmt die Werte jedoch als einzelnes Array (vprintf($format, $args)), nützlich, wenn die Argumente bereits in einem Array vorliegen.
  • fprintf() — schreibt den formatierten String in einen Stream/Datei-Handle anstatt in die Standardausgabe.

Für gebietsschemaabhängige Zahlenformatierung (Tausendertrennzeichen, Währung) verwende stattdessen number_format().

Wann es einzusetzen ist

Greife auf printf() (oder sprintf()) zurück, wenn das Ausgabelayout wichtig ist: ausgerichtete Spalten, Geldbeträge mit festen Dezimalstellen, nullaufgefüllte Bezeichner oder die Generierung von Strings wie Hex-Farben und URLs. Für einfache Ausgaben, bei denen die Formatierung keine Rolle spielt, ist echo einfacher und schneller.

Übungen

Übung
Was ist die Funktion von printf (oder sprintf), die im verlinkten Material erwähnt wird?
Was ist die Funktion von printf (oder sprintf), die im verlinkten Material erwähnt wird?
Was this page helpful?