print_r($array) imprime um array ou objeto com as chaves e os valores numa forma legível. var_dump($value) imprime a mesma estrutura mais o tipo e o tamanho de cada valor. Use print_r para ver o que há num array, e var_dump quando precisar saber se um valor é "1" ou 1.
Compare as duas saídas para admin: o print_r não imprimiu nada depois da seta, o var_dump imprimiu bool(false). Essa diferença é o principal motivo para usar o var_dump ao depurar.
print_r, var_dump ou var_export
As três funções mostram os mesmos dados com níveis diferentes de detalhe:
print_r | var_dump | var_export | |
|---|---|---|---|
| Mostra os tipos | não | sim | como literais PHP |
false, null, "" | não imprimem nada | bool(false), NULL, string(0) "" | false, NULL, '' |
| Pode retornar uma string | print_r($x, true) | não | var_export($x, true) |
| A saída é PHP válido | não | não | sim |
| Vários valores numa chamada | não | var_dump($a, $b) | não |
O print_r é o mais fácil de ler, o var_dump o mais preciso, e o var_export dá um código que você pode colar de volta num arquivo.
Obter a saída do print_r como string
Passe true como segundo argumento e o print_r retorna o texto em vez de imprimi-lo. É assim que você escreve um array num arquivo de log ou o coloca dentro de uma mensagem maior.
var_export($value, true) retorna uma string do mesmo jeito. O var_dump sempre imprime, então para capturá-lo você precisa de output buffering: ob_start(); var_dump($x); $text = ob_get_clean();.
Formatar um array no HTML com pre
Num navegador, as quebras de linha e os espaços do print_r se juntam numa única linha longa, porque o HTML ignora espaços em branco. Envolva a saída em <pre> para manter o layout. Rode e olhe a aba Page.
O htmlspecialchars importa assim que os dados possam conter < ou &, por exemplo entradas do usuário: sem ele, o navegador trataria esse texto como HTML. Para dados que você envia ao JavaScript ou a uma API, a forma com json_encode costuma ser a mais útil.
Mostrar vários valores de uma vez
O var_dump aceita qualquer quantidade de argumentos e imprime um de cada vez, o que é rápido para comparar dois valores lado a lado.
A saída mostra por que == diz que são iguais e === não: um é string(2) "42", o outro int(42).
Imprimir objetos
As três funções também imprimem objetos. O var_dump e o print_r marcam as propriedades privadas e protegidas ([label:Point:private]), o que ajuda quando uma propriedade parece estar faltando.
O #1 na saída do var_dump é o id do objeto. Duas variáveis que mostram o mesmo id apontam para o mesmo objeto.
Erro comum: echo num array
O echo transforma o argumento em string. Um array não tem forma de string, então o PHP imprime a palavra Array e gera um aviso:
<?php
$colors = ["red", "green", "blue"];
echo $colors;
O PHP imprime:
Warning: Array to string conversion in /home/index.php on line 3
Array
Imprima o conteúdo com uma das funções acima, ou junte os valores você mesmo:
O implode serve para mostrar uma lista a um usuário, o json_encode para logs e APIs, e o print_r ou o var_dump para a sua própria depuração.
Perguntas frequentes
Qual a diferença entre var_dump e print_r?
O print_r mostra chaves e valores numa forma curta e legível. O var_dump também mostra o tipo e o tamanho de cada valor, como string(3) "Ada" e bool(false), então é o que se usa quando o tipo importa. print_r(false) não imprime nada, enquanto var_dump(false) imprime bool(false).
Como obtenho a saída do print_r como string?
Passe true como segundo argumento: $text = print_r($array, true); retorna o texto em vez de imprimi-lo, para você escrevê-lo num log com error_log($text) ou guardá-lo numa variável. var_export($value, true) funciona do mesmo jeito; o var_dump não tem essa opção.
Como imprimo um array de forma bonita no navegador?
Envolva a saída numa tag <pre> para o navegador manter as quebras de linha e a indentação: echo '<pre>' . print_r($array, true) . '</pre>';. Escape com htmlspecialchars se os dados puderem conter HTML.
Por que o echo num array imprime Array?
O echo converte o argumento em string, e um array vira a palavra Array com o aviso "Array to string conversion". Use print_r, var_dump, implode(', ', $arr) ou json_encode($arr) para imprimir o conteúdo.
O que faz o var_export no PHP?
Ele imprime um valor como código PHP válido, por exemplo array ( 0 => 'a', ), que você pode colar de volta num script. Com true como segundo argumento, ele retorna o código como string, que é como algumas ferramentas escrevem arquivos de configuração em cache.