printf()
Articolo sulla funzione PHP printf(), usata per stampare una stringa formattata con controllo su larghezza, decimali, padding e base numerica.
La funzione PHP printf() produce in output una stringa formattata secondo un modello. A differenza di echo, che concatena e stampa i valori così come sono, printf() permette di controllare esattamente come appare ogni valore — larghezza, numero di decimali, padding, segno e base numerica — inserendo specificatori di formato (segnaposto come %s o %.2f) in una stringa di formato. È lo strumento giusto ogni volta che il layout dell'output è importante: tabelle allineate, importi con due decimali, ID con zeri iniziali o codici colore esadecimali.
Questa pagina tratta la sintassi, l'anatomia di uno specificatore di formato, le conversioni più comuni con esempi eseguibili e le funzioni strettamente correlate della stessa famiglia.
Sintassi
printf(string $format, mixed ...$values): int$format— una stringa modello contenente testo letterale e uno o più specificatori di formato.$values— i valori sostituiti negli specificatori, in ordine.- Restituisce il numero di caratteri scritti (la lunghezza dell'output), non la stringa stessa.
printf()stampa direttamente sull'output. Se vuoi che la stringa formattata venga restituita invece di stampata, usasprintf().
Un esempio di base
%s viene sostituito dal primo argomento ($name) formattato come stringa, e %d dal secondo ($age) formattato come intero con segno. L'output è:
My name is John Doe and I am 35 years old.Anatomia di uno specificatore di formato
Ogni specificatore inizia con % e può includere parti opzionali in questo ordine:
%[argnum$][flags][width][.precision]specifier- flags — es.
0(padding con zeri),-(allineamento a sinistra),+(mostra sempre il segno),' '(uno spazio esegue il padding con quel carattere). - width — il numero minimo di caratteri occupati dal campo.
- .precision — per i float, il numero di cifre dopo il punto decimale; per le stringhe, la lunghezza massima.
- specifier — il tipo di conversione (vedi sotto).
Per stampare un segno percentuale letterale, eseguire l'escape con %%.
Specificatori di conversione comuni
| Specificatore | Converte l'argomento in |
|---|---|
%s | una stringa |
%d | un intero decimale con segno |
%f | un numero in virgola mobile |
%b | binario |
%o | ottale |
%x / %X | esadecimale minuscolo / maiuscolo |
%e | notazione scientifica |
%% | un % letterale |
Larghezza, precisione e padding
È qui che printf() dimostra il suo valore. L'esempio seguente formatta un prezzo con due decimali, aggiunge zeri iniziali a un ID fino a 5 cifre e rappresenta un numero come colore esadecimale:
<?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);
?>Output:
Price: $7.50
Order ID: 00042
Color: #FF0000%.2f forza esattamente due decimali, %05d aggiunge zeri iniziali all'intero fino a una larghezza di 5, e %06X produce esadecimale maiuscolo con padding fino a 6 cifre.
Scambio di argomenti
Uno specificatore può nominare l'argomento che utilizza con n$, così è possibile riutilizzare un valore o riordinare gli argomenti senza modificare la lista — utile per stringhe traducibili dove l'ordine delle parole varia a seconda della lingua:
<?php
printf('%1$s likes %2$s. %2$s likes %1$s too.', 'Ann', 'tea');
?>Output:
Ann likes tea. tea likes Ann too.La famiglia printf
printf() appartiene a una famiglia di funzioni che condividono esattamente la stessa sintassi di formato ma differiscono in ciò che fanno con il risultato:
sprintf()— restituisce la stringa formattata invece di stamparla. Usala quando hai bisogno di memorizzare o elaborare ulteriormente il risultato.vprintf()— comeprintf(), ma accetta i valori come un singolo array (vprintf($format, $args)), utile quando gli argomenti si trovano già in un array.fprintf()— scrive la stringa formattata su uno stream/file handle anziché sull'output standard.
Per la formattazione dei numeri in base alla localizzazione (separatori delle migliaia, valuta), vedi invece number_format().
Quando usarla
Utilizza printf() (o sprintf()) quando il layout dell'output è importante: colonne allineate, importi con decimali fissi, identificatori con zeri iniziali o generazione di stringhe come colori esadecimali e URL. Per output semplice dove la formattazione non è rilevante, echo è più semplice e veloce.