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 comes(string),d(integer) of(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:
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:
| Specificatore | Significato | Valore di esempio → output |
|---|---|---|
%s | String | "hi" → hi |
%d | Intero con segno | 42 → 42 |
%f | Virgola mobile | 3.14159 → 3.141590 |
%b | Binario | 5 → 101 |
%x | Esadecimale minuscolo | 255 → ff |
%% | 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.90Riutilizzo 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 ffQui %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
| Funzione | Argomenti | Comportamento |
|---|---|---|
printf() | parametri separati | Stampa, restituisce la lunghezza |
vprintf() | array | Stampa, restituisce la lunghezza |
sprintf() | parametri separati | Restituisce la stringa (nessun output) |
vsprintf() | array | Restituisce la stringa (nessun output) |
vfprintf() | array | Scrive 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. Usavsprintf()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.