Menu

PHP var_dump() vs print_r(): imprimir arrays y depurar

print_r($array) imprime un array de forma legible, var_dump($value) muestra además cada tipo y longitud, y var_export imprime código PHP válido. Aprende cuándo usar cada uno, cómo obtener print_r como cadena y cómo mostrarlo bien formateado en HTML con <pre>.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

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_rvar_dumpvar_export
Muestra los tiposnosícomo literales de PHP
false, null, ""no imprimen nadabool(false), NULL, string(0) ""false, NULL, ''
Puede devolver una cadenaprint_r($x, true)novar_export($x, true)
La salida es PHP válidononosí
Varios valores en una llamadanovar_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é.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR