print_r($array) stampa un array o un oggetto con le sue chiavi e i suoi valori in forma leggibile. var_dump($value) stampa la stessa struttura più il tipo e la lunghezza di ogni valore. Usa print_r per vedere cosa c'è in un array, e var_dump quando devi sapere se un valore è "1" o 1.
Confronta i due output per admin: print_r non ha stampato nulla dopo la freccia, var_dump ha stampato bool(false). Questa differenza è il motivo principale per usare var_dump durante il debug.
print_r vs var_dump vs var_export
Le tre funzioni mostrano gli stessi dati con un dettaglio diverso:
print_r | var_dump | var_export | |
|---|---|---|---|
| Mostra i tipi | no | sì | come letterali PHP |
false, null, "" | non stampano nulla | bool(false), NULL, string(0) "" | false, NULL, '' |
| Può restituire una stringa | print_r($x, true) | no | var_export($x, true) |
| L'output è PHP valido | no | no | sì |
| Più valori in una chiamata | no | var_dump($a, $b) | no |
print_r è il più facile da leggere, var_dump il più preciso, e var_export ti dà codice da reincollare in un file.
Ottenere l'output di print_r come stringa
Passa true come secondo argomento e print_r restituisce il testo invece di stamparlo. È così che scrivi un array in un file di log o lo inserisci in un messaggio più lungo.
var_export($value, true) restituisce una stringa allo stesso modo. var_dump stampa sempre, quindi per catturarlo ti serve l'output buffering: ob_start(); var_dump($x); $text = ob_get_clean();.
Stampare un array leggibile nell'HTML con pre
In un browser, gli a capo e gli spazi di print_r si riducono a un'unica lunga riga, perché l'HTML ignora gli spazi bianchi. Racchiudi l'output in <pre> per mantenere l'impaginazione. Eseguilo e guarda la scheda Page.
htmlspecialchars conta appena i dati possono contenere < o &, per esempio l'input dell'utente: senza, il browser tratterebbe quel testo come HTML. Per i dati che invii a JavaScript o a un'API, la forma con json_encode è spesso la più utile.
Stampare più valori insieme
var_dump accetta un numero qualsiasi di argomenti e li stampa uno dopo l'altro, il che è comodo per confrontare due valori fianco a fianco.
L'output mostra perché == dice che sono uguali e === no: uno è string(2) "42", l'altro int(42).
Stampare oggetti
Tutte e tre le funzioni stampano anche gli oggetti. var_dump e print_r indicano le proprietà private e protected ([label:Point:private]), il che aiuta quando una proprietà sembra mancare.
Il #1 nell'output di var_dump è l'id dell'oggetto. Due variabili che mostrano lo stesso id puntano allo stesso oggetto.
Errore comune: echo su un array
echo trasforma il suo argomento in una stringa. Un array non ha una forma stringa, quindi PHP stampa la parola Array e genera un warning:
<?php
$colors = ["red", "green", "blue"];
echo $colors;
PHP stampa:
Warning: Array to string conversion in /home/index.php on line 3
Array
Stampa il contenuto con una delle funzioni qui sopra, oppure unisci tu i valori:
implode serve per mostrare una lista a un utente, json_encode per log e API, e print_r o var_dump per il tuo debug.
Domande frequenti
Qual è la differenza tra var_dump e print_r?
print_r mostra chiavi e valori in una forma breve e leggibile. var_dump mostra anche il tipo e la lunghezza di ogni valore, come string(3) "Ada" e bool(false), quindi è quello da usare quando il tipo conta. print_r(false) non stampa nulla, mentre var_dump(false) stampa bool(false).
Come ottengo l'output di print_r come stringa?
Passa true come secondo argomento: $text = print_r($array, true); restituisce il testo invece di stamparlo, così puoi scriverlo in un log con error_log($text) o metterlo in una variabile. var_export($value, true) funziona allo stesso modo; var_dump non ha questa opzione.
Come stampo un array in modo leggibile nel browser?
Racchiudi l'output in un tag <pre> così il browser mantiene a capo e indentazione: echo '<pre>' . print_r($array, true) . '</pre>';. Applica htmlspecialchars se i dati possono contenere HTML.
Perché echo su un array stampa Array?
echo converte il suo argomento in stringa, e un array si converte nella parola Array con il warning "Array to string conversion". Usa print_r, var_dump, implode(', ', $arr) o json_encode($arr) per stamparne il contenuto.
Cosa fa var_export in PHP?
Stampa un valore come codice PHP valido, per esempio array ( 0 => 'a', ), che puoi reincollare in uno script. Con true come secondo argomento restituisce il codice come stringa, ed è così che alcuni strumenti scrivono file di configurazione in cache.