print_r($array) affiche un tableau ou un objet avec ses clés et ses valeurs sous une forme lisible. var_dump($value) affiche la même structure plus le type et la longueur de chaque valeur. Utilisez print_r pour voir ce que contient un tableau, et var_dump quand vous devez savoir si une valeur vaut "1" ou 1.
Comparez les deux sorties pour admin : print_r n'a rien affiché après la flèche, var_dump a affiché bool(false). Cette différence est la principale raison de prendre var_dump pour déboguer.
print_r, var_dump ou var_export
Les trois fonctions montrent les mêmes données avec un niveau de détail différent :
print_r | var_dump | var_export | |
|---|---|---|---|
| Montre les types | non | oui | sous forme de littéraux PHP |
false, null, "" | n'affiche rien | bool(false), NULL, string(0) "" | false, NULL, '' |
| Peut renvoyer une chaîne | print_r($x, true) | non | var_export($x, true) |
| La sortie est du PHP valide | non | non | oui |
| Plusieurs valeurs en un appel | non | var_dump($a, $b) | non |
print_r est la plus facile à lire, var_dump la plus précise, et var_export vous donne du code que vous pouvez recoller dans un fichier.
Obtenir la sortie de print_r sous forme de chaîne
Passez true en second argument et print_r renvoie le texte au lieu de l'afficher. C'est ainsi qu'on écrit un tableau dans un fichier de journal ou qu'on l'insère dans un message plus large.
var_export($value, true) renvoie une chaîne de la même façon. var_dump affiche toujours, donc pour capturer sa sortie il faut la mise en tampon de sortie : ob_start(); var_dump($x); $text = ob_get_clean();.
Afficher joliment un tableau en HTML avec pre
Dans un navigateur, les sauts de ligne et les espaces de print_r se réduisent à une longue ligne, car le HTML ignore les espaces blancs. Entourez la sortie de <pre> pour garder la mise en forme. Exécutez ceci et regardez l'onglet Page.
htmlspecialchars compte dès que les données peuvent contenir < ou &, par exemple une saisie utilisateur : sans elle, le navigateur traiterait ce texte comme du HTML. Pour des données destinées à JavaScript ou à une API, la forme json_encode est souvent la plus utile.
Afficher plusieurs valeurs à la fois
var_dump accepte autant d'arguments que vous voulez et affiche chacun à son tour, ce qui permet de comparer rapidement deux valeurs côte à côte.
La sortie montre pourquoi == les dit égales et pas === : l'une est string(2) "42", l'autre int(42).
Afficher des objets
Les trois fonctions affichent aussi les objets. var_dump et print_r signalent les propriétés privées et protégées ([label:Point:private]), ce qui aide quand une propriété semble manquer.
Le #1 dans la sortie de var_dump est l'identifiant de l'objet. Deux variables qui montrent le même identifiant désignent le même objet.
Erreur fréquente : echo sur un tableau
echo transforme son argument en chaîne. Un tableau n'a pas de forme chaîne, donc PHP affiche le mot Array et déclenche un warning :
<?php
$colors = ["red", "green", "blue"];
echo $colors;
PHP affiche :
Warning: Array to string conversion in /home/index.php on line 3
Array
Affichez le contenu avec l'une des fonctions ci-dessus, ou assemblez vous-même les valeurs :
implode sert à montrer une liste à un utilisateur, json_encode aux journaux et aux API, et print_r ou var_dump à votre propre débogage.
Questions fréquentes
Quelle est la différence entre var_dump et print_r ?
print_r montre les clés et les valeurs sous une forme courte et lisible. var_dump montre aussi le type et la longueur de chaque valeur, comme string(3) "Ada" et bool(false), c'est donc celle à utiliser quand le type compte. print_r(false) n'affiche rien du tout, alors que var_dump(false) affiche bool(false).
Comment obtenir la sortie de print_r sous forme de chaîne ?
Passez true en second argument : $text = print_r($array, true); renvoie le texte au lieu de l'afficher, vous pouvez donc l'écrire dans un journal avec error_log($text) ou le mettre dans une variable. var_export($value, true) fonctionne de la même façon ; var_dump n'a pas cette option.
Comment afficher joliment un tableau dans le navigateur ?
Entourez la sortie d'une balise <pre> pour que le navigateur garde les sauts de ligne et l'indentation : echo '<pre>' . print_r($array, true) . '</pre>';. Échappez-la avec htmlspecialchars si les données peuvent contenir du HTML.
Pourquoi echo sur un tableau affiche-t-il Array ?
echo convertit son argument en chaîne, et un tableau se convertit en mot Array avec le warning « Array to string conversion ». Utilisez print_r, var_dump, implode(', ', $arr) ou json_encode($arr) pour afficher le contenu.
Que fait var_export en PHP ?
Elle affiche une valeur sous forme de code PHP valide, par exemple array ( 0 => 'a', ), que vous pouvez recoller dans un script. Avec true en second argument, elle renvoie le code sous forme de chaîne, c'est ainsi que certains outils écrivent des fichiers de configuration en cache.