Menu

var_dump() vs print_r() w PHP: wypisywanie tablic i debug

print_r($array) wypisuje tablicę w czytelnej formie, var_dump($value) pokazuje dodatkowo każdy typ i długość, a var_export wypisuje poprawny kod PHP. Dowiedz się, kiedy używać której, jak dostać print_r jako string i jak ładnie wypisać dane w HTML przez <pre>.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

print_r($array) wypisuje tablicę lub obiekt z kluczami i wartościami w czytelnej formie. var_dump($value) wypisuje tę samą strukturę oraz typ i długość każdej wartości. Używaj print_r, aby zobaczyć, co jest w tablicy, a var_dump, gdy musisz wiedzieć, czy wartość to "1", czy 1.

Porównaj oba wyniki dla admin: print_r nie wypisało nic po strzałce, a var_dump wypisało bool(false). Ta różnica to główny powód, by przy debugowaniu sięgać po var_dump.

print_r vs var_dump vs var_export

Te trzy funkcje pokazują te same dane z różną szczegółowością:

print_rvar_dumpvar_export
Pokazuje typynietakjako literały PHP
false, null, ""nic nie wypisująbool(false), NULL, string(0) ""false, NULL, ''
Może zwrócić stringprint_r($x, true)nievar_export($x, true)
Wynik to poprawny PHPnienietak
Kilka wartości w jednym wywołaniunievar_dump($a, $b)nie

print_r czyta się najłatwiej, var_dump jest najdokładniejsze, a var_export daje kod, który możesz wkleić z powrotem do pliku.

Wynik print_r jako string

Przekaż true jako drugi argument, a print_r zwróci tekst zamiast go wypisać. Tak zapisujesz tablicę do pliku logu albo umieszczasz ją w dłuższym komunikacie.

var_export($value, true) zwraca string w ten sam sposób. var_dump zawsze wypisuje, więc aby przechwycić jego wynik, potrzebujesz buforowania wyjścia: ob_start(); var_dump($x); $text = ob_get_clean();.

Ładne wypisanie tablicy w HTML przez pre

W przeglądarce złamania linii i spacje z print_r zlewają się w jedną długą linię, bo HTML ignoruje białe znaki. Otocz wynik znacznikiem <pre>, aby zachować układ. Uruchom to i spójrz na zakładkę Page.

htmlspecialchars ma znaczenie, gdy tylko dane mogą zawierać < albo &, na przykład dane od użytkownika: bez tego przeglądarka potraktowałaby ten tekst jak HTML. Dla danych wysyłanych do JavaScriptu lub API często najbardziej przydatna jest forma json_encode.

Kilka wartości naraz

var_dump przyjmuje dowolną liczbę argumentów i wypisuje każdy po kolei, co pozwala szybko porównać dwie wartości obok siebie.

Wynik pokazuje, dlaczego == uznaje je za równe, a === nie: jedna to string(2) "42", druga int(42).

Wypisywanie obiektów

Wszystkie trzy funkcje wypisują też obiekty. var_dump i print_r oznaczają właściwości prywatne i chronione ([label:Point:private]), co pomaga, gdy jakaś właściwość wydaje się brakować.

#1 w wyniku var_dump to identyfikator obiektu. Dwie zmienne, które pokazują ten sam identyfikator, wskazują ten sam obiekt.

Częsty błąd: echo na tablicy

echo zamienia argument na string. Tablica nie ma postaci tekstowej, więc PHP wypisuje słowo Array i zgłasza ostrzeżenie:

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

PHP wypisuje:

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

Wypisz zawartość jedną z powyższych funkcji albo połącz wartości sam:

implode służy do pokazania listy użytkownikowi, json_encode do logów i API, a print_r lub var_dump do twojego własnego debugowania.

Najczęściej zadawane pytania

Czym różni się var_dump od print_r?

print_r pokazuje klucze i wartości w krótkiej, czytelnej formie. var_dump pokazuje też typ i długość każdej wartości, na przykład string(3) "Ada" i bool(false), więc to jego używaj, gdy liczy się typ. print_r(false) nie wypisuje nic, a var_dump(false) wypisuje bool(false).

Jak dostać wynik print_r jako string?

Przekaż true jako drugi argument: $text = print_r($array, true); zwraca tekst zamiast go wypisywać, więc możesz zapisać go do logu przez error_log($text) albo umieścić w zmiennej. var_export($value, true) działa tak samo; var_dump nie ma takiej opcji.

Jak ładnie wypisać tablicę w przeglądarce?

Otocz wynik znacznikiem <pre>, żeby przeglądarka zachowała złamania linii i wcięcia: echo '<pre>' . print_r($array, true) . '</pre>';. Escapuj przez htmlspecialchars, jeśli dane mogą zawierać HTML.

Dlaczego echo na tablicy wypisuje Array?

echo zamienia argument na string, a tablica zamienia się na słowo Array z ostrzeżeniem „Array to string conversion”. Aby wypisać zawartość, użyj print_r, var_dump, implode(', ', $arr) albo json_encode($arr).

Co robi var_export w PHP?

Wypisuje wartość jako poprawny kod PHP, na przykład array ( 0 => 'a', ), który możesz wkleić z powrotem do skryptu. Z true jako drugim argumentem zwraca kod jako string, i tak niektóre narzędzia zapisują pliki konfiguracji w pamięci podręcznej.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ