Menu

PHP var_dump() vs print_r(): Arrays ausgeben und debuggen

print_r($array) gibt ein Array in lesbarer Form aus, var_dump($value) zeigt zusätzlich jeden Typ und jede Länge, und var_export gibt gültigen PHP-Code aus. Hier: wann du welche verwendest, wie du print_r als String bekommst und wie du in HTML mit <pre> formatiert ausgibst.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

print_r($array) gibt ein Array oder Objekt mit seinen Schlüsseln und Werten in lesbarer Form aus. var_dump($value) gibt dieselbe Struktur aus, plus Typ und Länge jedes Werts. Verwende print_r, um zu sehen, was in einem Array steht, und var_dump, wenn du wissen musst, ob ein Wert "1" oder 1 ist.

Vergleiche die beiden Ausgaben für admin: print_r hat nach dem Pfeil nichts ausgegeben, var_dump hat bool(false) ausgegeben. Dieser Unterschied ist der Hauptgrund, beim Debuggen zu var_dump zu greifen.

print_r vs var_dump vs var_export

Die drei Funktionen zeigen dieselben Daten mit unterschiedlich viel Detail:

print_rvar_dumpvar_export
Zeigt Typenneinjaals PHP-Literale
false, null, ""geben nichts ausbool(false), NULL, string(0) ""false, NULL, ''
Kann einen String liefernprint_r($x, true)neinvar_export($x, true)
Ausgabe ist gültiges PHPneinneinja
Mehrere Werte in einem Aufrufneinvar_dump($a, $b)nein

print_r ist am leichtesten zu lesen, var_dump am genauesten, und var_export gibt dir Code, den du wieder in eine Datei einfügen kannst.

Die Ausgabe von print_r als String bekommen

Übergib true als zweites Argument, dann liefert print_r den Text, statt ihn auszugeben. So schreibst du ein Array in eine Logdatei oder setzt es in eine größere Nachricht.

var_export($value, true) liefert auf dieselbe Weise einen String. var_dump gibt immer aus, also brauchst du zum Einfangen Output Buffering: ob_start(); var_dump($x); $text = ob_get_clean();.

Ein Array in HTML mit pre formatiert ausgeben

Im Browser fallen die Zeilenumbrüche und Leerzeichen von print_r zu einer langen Zeile zusammen, weil HTML Leerraum ignoriert. Setze die Ausgabe in <pre>, um das Layout zu behalten. Führe das aus und schau dir den Tab Page an.

htmlspecialchars wird wichtig, sobald die Daten < oder & enthalten könnten, zum Beispiel Nutzereingaben: Ohne würde der Browser diesen Text als HTML behandeln. Für Daten, die du an JavaScript oder eine API schickst, ist die Form mit json_encode oft die nützlichste.

Mehrere Werte auf einmal ausgeben

var_dump akzeptiert beliebig viele Argumente und gibt jedes der Reihe nach aus, was praktisch ist, um zwei Werte direkt zu vergleichen.

Die Ausgabe zeigt, warum == sie für gleich hält und === nicht: Der eine ist string(2) "42", der andere int(42).

Objekte ausgeben

Alle drei Funktionen geben auch Objekte aus. var_dump und print_r markieren private und geschützte Eigenschaften ([label:Point:private]), was hilft, wenn eine Eigenschaft zu fehlen scheint.

Das #1 in der Ausgabe von var_dump ist die ID des Objekts. Zwei Variablen, die dieselbe ID zeigen, zeigen auf dasselbe Objekt.

Typischer Fehler: echo auf ein Array

echo macht aus seinem Argument einen String. Ein Array hat keine String-Form, also gibt PHP das Wort Array aus und löst eine Warnung aus:

<?php
$colors = ["red", "green", "blue"];
echo $colors;

PHP gibt aus:

Warning: Array to string conversion in /home/index.php on line 3
Array

Gib den Inhalt mit einer der Funktionen oben aus oder verbinde die Werte selbst:

implode ist dafür, einem Nutzer eine Liste zu zeigen, json_encode für Logs und APIs, und print_r oder var_dump für dein eigenes Debugging.

Häufig gestellte Fragen

Was ist der Unterschied zwischen var_dump und print_r?

print_r zeigt Schlüssel und Werte in kurzer, lesbarer Form. var_dump zeigt außerdem Typ und Länge jedes Werts, etwa string(3) "Ada" und bool(false), und ist deshalb die richtige Wahl, wenn der Typ zählt. print_r(false) gibt gar nichts aus, während var_dump(false) bool(false) ausgibt.

Wie bekomme ich die Ausgabe von print_r als String?

Übergib true als zweites Argument: $text = print_r($array, true); liefert den Text, statt ihn auszugeben, sodass du ihn mit error_log($text) in ein Log schreiben oder in eine Variable setzen kannst. var_export($value, true) funktioniert genauso; var_dump hat keine solche Option.

Wie gebe ich ein Array im Browser schön formatiert aus?

Setze die Ausgabe in ein <pre>-Tag, damit der Browser Zeilenumbrüche und Einrückung behält: echo '<pre>' . print_r($array, true) . '</pre>';. Escape sie mit htmlspecialchars, wenn die Daten HTML enthalten können.

Warum gibt echo bei einem Array Array aus?

echo wandelt sein Argument in einen String um, und ein Array wird zum Wort Array, mit der Warnung „Array to string conversion“. Verwende print_r, var_dump, implode(', ', $arr) oder json_encode($arr), um den Inhalt auszugeben.

Was macht var_export in PHP?

Es gibt einen Wert als gültigen PHP-Code aus, zum Beispiel array ( 0 => 'a', ), den du wieder in ein Skript einfügen kannst. Mit true als zweitem Argument liefert es den Code als String, und so schreiben manche Werkzeuge gecachte Konfigurationsdateien.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S