W3docs

vprintf()

La funzione vprintf() in PHP produce una stringa formattata come printf(), ma accetta i valori da sostituire in un array anziché come argomenti separati.

Introduzione

La funzione vprintf() in PHP produce in output una stringa formattata. Si comporta esattamente come printf(), con la differenza che i valori da sostituire vengono forniti come un singolo array anziché come argomenti separati. La v nel nome sta per vector (array).

Questa pagina tratta la sintassi, gli specificatori di formato disponibili, una serie di esempi eseguibili, le differenze rispetto alle funzioni correlate e gli errori comuni da evitare.

Usa vprintf() quando i valori da formattare si trovano già in un array — ad esempio, una riga di database, il risultato di explode(), o una lista costruita dinamicamente. Distribuire manualmente tale array in printf($fmt, $row[0], $row[1], ...) è prolisso e smette di funzionare non appena cambia il numero di campi; vprintf($fmt, $row) gestisce qualsiasi numero di elementi in modo pulito.

Sintassi

vprintf(string $format, array $values): int|false
  • $format — una stringa template contenente uno o più segnaposto. Ogni segnaposto inizia con il simbolo percentuale (%) seguito da uno specificatore di conversione come s (string), d (integer) o f (float).
  • $values — un array i cui elementi riempiono i segnaposto, in ordine. Dovrebbe contenere almeno tanti elementi quanti sono i segnaposto.

vprintf() stampa il risultato direttamente e restituisce la lunghezza della stringa di output (un int), oppure false in caso di errore. Se hai bisogno della stringa formattata come valore anziché stamparla, usa vsprintf().

Esempio di base

Ecco il caso più semplice — tre segnaposto string riempiti da un array:

php— editable, runs on the server

Questo produrrà l'output:

I like apple, banana, and orange.

Ogni %s viene sostituito, in ordine, dall'elemento successivo di $values.

Specificatori di formato più comuni

La stringa di formato è la stessa usata in tutta la famiglia printf. Gli specificatori più utili sono:

SpecificatoreSignificatoValore di esempio → output
%sString"hi"hi
%dIntero con segno4242
%fVirgola mobile3.141593.141590
%bBinario5101
%xEsadecimale minuscolo255ff
%%Un simbolo percentuale letterale%

Puoi anche controllare larghezza, riempimento, segno e precisione tra % e lo specificatore:

<?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]);

Output:

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

Riutilizzo di un valore con la numerazione degli argomenti

Puoi fare riferimento a un elemento specifico dell'array più di una volta usando la sintassi di scambio %n$, dove n è la posizione a base 1:

<?php

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

Output:

Hex of 255 is ff

Qui %1$d e %1$x leggono entrambi il primo elemento dell'array (255) e lo formattano rispettivamente come decimale ed esadecimale.

Utilizzo del valore restituito

vprintf() restituisce il numero di caratteri stampati, il che è utile per il logging o i controlli di allineamento:

<?php

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

Output:

Total: $49.90
Printed 14 characters.

vprintf() vs. funzioni correlate

FunzioneArgomentiComportamento
printf()parametri separatiStampa, restituisce la lunghezza
vprintf()arrayStampa, restituisce la lunghezza
sprintf()parametri separatiRestituisce la stringa (nessun output)
vsprintf()arrayRestituisce la stringa (nessun output)
vfprintf()arrayScrive su uno stream/file handle

Regola pratica: scegli la versione con v quando i dati si trovano in un array, e la versione con s quando vuoi che la stringa venga restituita invece di essere stampata.

Errori comuni

  • Conteggi non corrispondenti. Se l'array ha meno elementi dei segnaposto, PHP genera un ArgumentCountError (PHP 8+) o un avviso nelle versioni precedenti. Gli elementi extra dell'array vengono semplicemente ignorati.
  • Escape di $ nelle stringhe con doppi apici. Un simbolo del dollaro letterale prima di una cifra (come in $5) può collidere con l'interpolazione di variabili PHP. Usa stringhe di formato con apici singoli oppure fai l'escape con \$, come mostrato sopra.
  • Dimenticare che stampa immediatamente. vprintf() scrive nell'output immediatamente — il suo valore restituito è una lunghezza, non la stringa. Usa vsprintf() per catturare il risultato.
  • Array associativi. Vengono usati solo i valori, nell'ordine in cui sono memorizzati; le chiavi vengono ignorate. Passa una lista (array numerico sequenziale) per evitare sorprese.

Esercitazione

Pratica
Cosa si può dire della funzione vprintf in PHP?
Cosa si può dire della funzione vprintf in PHP?
Was this page helpful?