Start · Sprachen · PHP · Referenz · vprintf

vprintf

Funktion

Gibt einen formatierten String anhand eines Format-Musters und eines Arrays mit Werten direkt aus und gibt die Länge des ausgegebenen Strings zurück.

seit PHP 4.1.0 Kategorie: string

Signatur

vprintf(string $format, array $values): int

Beschreibung

vprintf() funktioniert wie printf(), erwartet jedoch die einzusetzenden Werte nicht als einzelne Argumente, sondern als Array. Dies macht die Funktion besonders praktisch, wenn die Werte bereits als Array vorliegen oder dynamisch zusammengestellt werden.

Das Format-Muster folgt denselben Regeln wie bei sprintf(): Platzhalter beginnen mit %, gefolgt von optionalen Angaben zu Position, Auffüllung, Ausrichtung, Breite, Genauigkeit und dem Typbezeichner (z. B. %s für Strings, %d für ganze Zahlen, %f für Fließkommazahlen). Positionsangaben wie %1$s ermöglichen die mehrfache Verwendung desselben Wertes oder eine andere Reihenfolge der Ausgabe.

Die Ausgabe erfolgt direkt zum aktuellen Ausgabepuffer (Browser, CLI usw.). Soll der formatierte String stattdessen als Variable gespeichert werden, ist vsprintf() zu verwenden.

vprintf() eignet sich besonders in Situationen, in denen Format-String und Werte-Array getrennt voneinander zusammengebaut werden, etwa bei der Internationalisierung von Texten oder beim Verarbeiten externer Daten.

Parameter

Name Typ Default Beschreibung
$format Pflicht string Der Format-String mit %-Platzhaltern, wie bei sprintf(). Jeder Platzhalter wird durch den entsprechenden Wert aus $values ersetzt.
$values Pflicht array Ein indiziertes Array mit den Werten, die in den Format-String eingesetzt werden. Die Reihenfolge der Elemente entspricht der Reihenfolge der Platzhalter (sofern keine Positionsangaben verwendet werden).

Rückgabewert

Typ
int
Beschreibung
Gibt die Länge (Anzahl der Zeichen) des ausgegebenen Strings zurück.

Beispiele

Einfache Ausgabe mit mehreren Typen

<?php
$format = 'Benutzer %s hat %d Punkte und ein Guthaben von %.2f Euro.';
$werte  = ['Alice', 42, 19.5];

$laenge = vprintf($format, $werte);
echo PHP_EOL . '(Ausgabe: ' . $laenge . ' Zeichen)';
Benutzer Alice hat 42 Punkte und ein Guthaben von 19.50 Euro. (Ausgabe: 60 Zeichen)

Verwendung mit Positionsangaben (Internationalisierung)

<?php
// Deutsch: Vorname zuerst, dann Nachname
$format_de = 'Guten Tag, %1$s %2$s!';
// Andere Sprache: Nachname zuerst
$format_en = 'Hello, %2$s %1$s!';

$werte = ['Maria', 'Müller'];

vprintf($format_de, $werte);
echo PHP_EOL;
vprintf($format_en, $werte);
Guten Tag, Maria Müller! Hello, Müller Maria!

Dynamisch zusammengestelltes Werte-Array

<?php
$produkt = [
    'name'   => 'Laptop',
    'menge'  => 3,
    'preis'  => 899.99,
];

$format = "Produkt: %-20s | Menge: %3d | Preis: %8.2f EUR\n";
vprintf($format, array_values($produkt));
Produkt: Laptop | Menge: 3 | Preis: 899.99 EUR

// Wichtig · Fallstricke

Sicherheitshinweis: Benutzer-Eingaben dürfen niemals als $format-Argument übergeben werden, da ein manipulierter Format-String zu unerwarteten Ausgaben oder dem Lesen interner Daten führen kann. Benutzer-Eingaben gehören ausschließlich in das $values-Array.

Wenn die Anzahl der Platzhalter im Format-String nicht mit der Anzahl der Array-Elemente übereinstimmt, erzeugt PHP seit PHP 8.0 einen ValueError. In älteren Versionen wurde lediglich eine Warnung ausgegeben.

Für die Rückgabe des formatierten Strings als Variable (ohne direkte Ausgabe) steht vsprintf() zur Verfügung.