W3docs

vprintf()

Die PHP-Funktion vprintf() gibt einen formatierten String aus. Sie funktioniert wie printf(), jedoch werden die Argumente als Array übergeben.

Einführung

Die Funktion vprintf() in PHP gibt einen formatierten String aus. Sie verhält sich genau wie printf(), mit dem Unterschied, dass die einzusetzenden Werte als einzelnes Array statt als separate Argumente übergeben werden. Das v im Namen steht für vector (Array).

Diese Seite behandelt die Syntax, die verwendbaren Formatbezeichner, eine Reihe ausführbarer Beispiele, die Unterschiede zu verwandten Funktionen sowie häufige Fehler, die es zu vermeiden gilt.

Verwenden Sie vprintf(), wenn die zu formatierenden Werte bereits in einem Array vorliegen — zum Beispiel eine Datenbankzeile, das Ergebnis von explode() oder eine dynamisch aufgebaute Liste. Ein solches Array manuell in printf($fmt, $row[0], $row[1], ...) aufzuteilen ist umständlich und schlägt fehl, sobald sich die Anzahl der Felder ändert; vprintf($fmt, $row) verarbeitet jede Anzahl problemlos.

Syntax

vprintf(string $format, array $values): int|false
  • $format — ein Template-String, der einen oder mehrere Platzhalter enthält. Jeder Platzhalter beginnt mit einem Prozentzeichen (%), gefolgt von einem Konvertierungsbezeichner wie s (string), d (integer) oder f (float).
  • $values — ein Array, dessen Elemente die Platzhalter der Reihe nach befüllen. Es sollte mindestens so viele Elemente enthalten, wie Platzhalter vorhanden sind.

vprintf() gibt das Ergebnis direkt aus und gibt die Länge des ausgegebenen Strings zurück (ein int) oder false bei einem Fehler. Wenn Sie den formatierten String als Wert benötigen, ohne ihn auszugeben, verwenden Sie vsprintf().

Einfaches Beispiel

Hier ist der einfachste Fall — drei String-Platzhalter, die aus einem Array befüllt werden:

php— editable, runs on the server

Dies gibt Folgendes aus:

I like apple, banana, and orange.

Jedes %s wird der Reihe nach durch das nächste Element von $values ersetzt.

Häufige Formatbezeichner

Der Formatstring ist derselbe, der in der gesamten printf-Familie verwendet wird. Die nützlichsten Bezeichner sind:

BezeichnerBedeutungBeispielwert → Ausgabe
%sString"hi"hi
%dVorzeichenbehafteter Integer4242
%fGleitkommazahl3.141593.141590
%bBinär5101
%xHexadezimal (Kleinbuchstaben)255ff
%%Ein wörtliches Prozentzeichen%

Sie können zwischen % und dem Bezeichner auch Breite, Auffüllung, Vorzeichen und Genauigkeit steuern:

<?php

// Pad an integer to 5 digits with leading zeros, show the sign, print binary.
vprintf("%05d / %+d / %b\n", [42, 7, 5]);

// Left-align in 10 columns, then right-align in 10 columns.
vprintf("%-10s|%10s|\n", ["left", "right"]);

// Money: two decimal places.
vprintf("Total: \$%01.2f\n", [49.9]);

Ausgabe:

00042 / +7 / 101
left      |     right|
Total: $49.90

Einen Wert mehrfach verwenden mit Argumentnummerierung

Sie können ein bestimmtes Array-Element mehr als einmal mit der %n$-Swap-Syntax referenzieren, wobei n die 1-basierte Position ist:

<?php

vprintf("Hex of %1\$d is %1\$x\n", [255]);

Ausgabe:

Hex of 255 is ff

Hier lesen sowohl %1$d als auch %1$x das erste Array-Element (255) und formatieren es als Dezimal- bzw. Hexadezimalzahl.

Den Rückgabewert nutzen

vprintf() gibt die Anzahl der ausgegebenen Zeichen zurück, was für Protokollierung oder Ausrichtungsprüfungen praktisch ist:

<?php

$len = vprintf("Total: \$%01.2f\n", [49.9]);
echo "Printed $len characters.\n";

Ausgabe:

Total: $49.90
Printed 14 characters.

vprintf() im Vergleich zu verwandten Funktionen

FunktionArgumenteVerhalten
printf()separate ParameterGibt aus, liefert Länge zurück
vprintf()ArrayGibt aus, liefert Länge zurück
sprintf()separate ParameterGibt den String zurück (keine Ausgabe)
vsprintf()ArrayGibt den String zurück (keine Ausgabe)
vfprintf()ArraySchreibt in einen Stream/Datei-Handle

Faustregel: Wählen Sie die v-Version, wenn Ihre Daten in einem Array vorliegen, und die s-Version, wenn der String zurückgegeben statt ausgegeben werden soll.

Häufige Fehlerquellen

  • Nicht übereinstimmende Anzahl. Wenn das Array weniger Elemente enthält als Platzhalter vorhanden sind, löst PHP einen ArgumentCountError aus (PHP 8+) oder eine Warnung in älteren Versionen. Überzählige Array-Elemente werden einfach ignoriert.
  • $ in doppelten Anführungszeichen maskieren. Ein wörtliches Dollarzeichen vor einer Ziffer (wie $5) kann mit der PHP-Variableninterpolation kollidieren. Verwenden Sie entweder einfach angeführte Formatstrings oder maskieren Sie es als \$, wie oben gezeigt.
  • Vergessen, dass es ausgibt. vprintf() schreibt sofort in die Ausgabe — sein Rückgabewert ist eine Länge, kein String. Verwenden Sie vsprintf(), um das Ergebnis aufzufangen.
  • Assoziative Arrays. Nur die Werte werden verwendet, in der gespeicherten Reihenfolge; Schlüssel werden ignoriert. Übergeben Sie eine Liste (numerisches, sequenzielles Array), um Überraschungen zu vermeiden.

Übung

Übung
Was lässt sich über die vprintf-Funktion in PHP sagen?
Was lässt sich über die vprintf-Funktion in PHP sagen?
Was this page helpful?