Menu

PHP var_dump() и print_r(): вывод массивов и отладка

print_r($array) выводит массив в читаемом виде, var_dump($value) показывает ещё тип и длину каждого значения, а var_export выводит корректный PHP-код. Когда что использовать, как получить вывод print_r строкой и как красиво вывести массив в HTML через <pre>.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

print_r($array) выводит массив или объект с ключами и значениями в читаемом виде. var_dump($value) выводит ту же структуру плюс тип и длину каждого значения. Используйте print_r, чтобы увидеть, что лежит в массиве, и var_dump, когда нужно знать, это "1" или 1.

Сравните два вывода для admin: print_r ничего не вывел после стрелки, а var_dump вывел bool(false). Это главная причина брать при отладке var_dump.

print_r, var_dump и var_export

Три функции показывают одни и те же данные с разной детализацией:

print_rvar_dumpvar_export
Показывает типынетдакак литералы PHP
false, null, ""ничего не выводитbool(false), NULL, string(0) ""false, NULL, ''
Может вернуть строкуprint_r($x, true)нетvar_export($x, true)
Вывод это корректный PHPнетнетда
Несколько значений за один вызовнетvar_dump($a, $b)нет

print_r читается легче всего, var_dump точнее всего, а var_export даёт код, который можно вставить обратно в файл.

Вывод print_r в виде строки

Передайте true вторым аргументом, и print_r вернёт текст, а не напечатает его. Так массив записывают в лог-файл или вставляют в более длинное сообщение.

var_export($value, true) возвращает строку так же. var_dump всегда печатает, поэтому чтобы поймать его вывод, нужна буферизация вывода: ob_start(); var_dump($x); $text = ob_get_clean();.

Красивый вывод массива в HTML через pre

В браузере переносы строк и пробелы print_r схлопываются в одну длинную строку, потому что HTML игнорирует пробельные символы. Оберните вывод в <pre>, чтобы сохранить разметку. Запустите и посмотрите на вкладку Page.

htmlspecialchars становится важен, как только в данных может оказаться < или &, например в пользовательском вводе: без него браузер воспримет такой текст как HTML. Для данных, которые вы отправляете в JavaScript или API, часто удобнее всего форма json_encode.

Вывод нескольких значений сразу

var_dump принимает любое число аргументов и выводит их по очереди, так удобно быстро сравнить два значения рядом.

Вывод показывает, почему == считает их равными, а === нет: одно это string(2) "42", другое int(42).

Вывод объектов

Все три функции выводят и объекты. var_dump и print_r помечают закрытые и защищённые свойства ([label:Point:private]), что помогает, когда свойство будто бы пропало.

#1 в выводе var_dump это id объекта. Две переменные, у которых показан один и тот же id, указывают на один объект.

Частая ошибка: echo для массива

echo превращает аргумент в строку. У массива нет строкового представления, поэтому PHP выводит слово Array и выдаёт предупреждение:

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

PHP выводит:

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

Выведите содержимое одной из функций выше или склейте значения сами:

implode нужен, чтобы показать список пользователю, json_encode для логов и API, а print_r или var_dump для вашей собственной отладки.

Часто задаваемые вопросы

Чем var_dump отличается от print_r?

print_r показывает ключи и значения в коротком читаемом виде. var_dump показывает ещё тип и длину каждого значения, например string(3) "Ada" и bool(false), поэтому его используют, когда важен тип. print_r(false) не выводит вообще ничего, а var_dump(false) выводит bool(false).

Как получить вывод print_r в виде строки?

Передайте true вторым аргументом: $text = print_r($array, true); возвращает текст, а не печатает его, поэтому его можно записать в лог через error_log($text) или положить в переменную. var_export($value, true) работает так же; у var_dump такой опции нет.

Как красиво вывести массив в браузере?

Оберните вывод в тег <pre>, чтобы браузер сохранил переносы строк и отступы: echo '<pre>' . print_r($array, true) . '</pre>';. Экранируйте его через htmlspecialchars, если в данных может быть HTML.

Почему echo для массива выводит Array?

echo приводит аргумент к строке, а массив превращается в слово Array с предупреждением "Array to string conversion". Чтобы вывести содержимое, используйте print_r, var_dump, implode(', ', $arr) или json_encode($arr).

Что делает var_export в PHP?

Выводит значение как корректный PHP-код, например array ( 0 => 'a', ), который можно вставить обратно в скрипт. С true вторым аргументом функция возвращает код строкой, и так некоторые инструменты пишут кешированные файлы настроек.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ