print_r($array) imprime un array o un objeto con sus claves y valores de forma legible. var_dump($value) imprime la misma estructura más el tipo y la longitud de cada valor. Usa print_r para ver qué hay en un array, y var_dump cuando necesites saber si un valor es "1" o 1.
Compara las dos salidas para admin: print_r no imprimió nada tras la flecha, var_dump imprimió bool(false). Esa diferencia es el motivo principal para usar var_dump al depurar.
print_r vs var_dump vs var_export
Las tres funciones muestran los mismos datos con distinto nivel de detalle:
print_r | var_dump | var_export | |
|---|---|---|---|
| Muestra los tipos | no | sí | como literales de PHP |
false, null, "" | no imprimen nada | bool(false), NULL, string(0) "" | false, NULL, '' |
| Puede devolver una cadena | print_r($x, true) | no | var_export($x, true) |
| La salida es PHP válido | no | no | sí |
| Varios valores en una llamada | no | var_dump($a, $b) | no |
print_r es el más fácil de leer, var_dump el más preciso y var_export te da código que puedes pegar de nuevo en un archivo.
Obtener la salida de print_r como cadena
Pasa true como segundo argumento y print_r devuelve el texto en lugar de imprimirlo. Así escribes un array en un archivo de log o lo metes dentro de un mensaje más largo.
var_export($value, true) devuelve una cadena de la misma forma. var_dump siempre imprime, así que para capturarlo necesitas el búfer de salida: ob_start(); var_dump($x); $text = ob_get_clean();.
Imprimir un array de forma legible en HTML con pre
En un navegador, los saltos de línea y los espacios de print_r se reducen a una sola línea larga, porque HTML ignora los espacios en blanco. Envuelve la salida en <pre> para conservar el formato. Ejecuta esto y mira la pestaña Página.
htmlspecialchars importa en cuanto los datos pueden contener < o &, por ejemplo la entrada de un usuario: sin él, el navegador trataría ese texto como HTML. Para los datos que envías a JavaScript o a una API, la forma con json_encode suele ser la más útil.
Mostrar varios valores a la vez
var_dump acepta cualquier número de argumentos y los imprime uno tras otro, lo que es rápido para comparar dos valores lado a lado.
La salida muestra por qué == dice que son iguales y === no: uno es string(2) "42" y el otro int(42).
Imprimir objetos
Las tres funciones también imprimen objetos. var_dump y print_r marcan las propiedades privadas y protegidas ([label:Point:private]), algo que ayuda cuando parece que falta una propiedad.
El #1 de la salida de var_dump es el id del objeto. Dos variables que muestran el mismo id apuntan al mismo objeto.
Error frecuente: echo con un array
echo convierte su argumento en una cadena. Un array no tiene forma de cadena, así que PHP imprime la palabra Array y genera un warning:
<?php
$colors = ["red", "green", "blue"];
echo $colors;
PHP imprime:
Warning: Array to string conversion in /home/index.php on line 3
Array
Imprime el contenido con una de las funciones de arriba, o une tú los valores:
implode es para mostrar una lista a un usuario, json_encode para logs y APIs, y print_r o var_dump para tu propia depuración.
Preguntas frecuentes
¿Cuál es la diferencia entre var_dump y print_r?
print_r muestra las claves y los valores de forma corta y legible. var_dump muestra además el tipo y la longitud de cada valor, como string(3) "Ada" y bool(false), así que es el que hay que usar cuando importa el tipo. print_r(false) no imprime nada, mientras que var_dump(false) imprime bool(false).
¿Cómo obtengo la salida de print_r como cadena?
Pasa true como segundo argumento: $text = print_r($array, true); devuelve el texto en lugar de imprimirlo, así que puedes escribirlo en un log con error_log($text) o guardarlo en una variable. var_export($value, true) funciona igual; var_dump no tiene esa opción.
¿Cómo imprimo un array de forma legible en el navegador?
Envuelve la salida en una etiqueta <pre> para que el navegador conserve los saltos de línea y la indentación: echo '<pre>' . print_r($array, true) . '</pre>';. Escápala con htmlspecialchars si los datos pueden contener HTML.
¿Por qué echo con un array imprime Array?
echo convierte su argumento en cadena, y un array se convierte en la palabra Array con el warning "Array to string conversion". Usa print_r, var_dump, implode(', ', $arr) o json_encode($arr) para imprimir el contenido.
¿Qué hace var_export en PHP?
Imprime un valor como código PHP válido, por ejemplo array ( 0 => 'a', ), que puedes pegar de nuevo en un script. Con true como segundo argumento devuelve el código como cadena, que es como algunas herramientas escriben archivos de configuración en caché.