print_r со сворачиванием узлов
Для своего удобства я написал аналог функции print_r
. Сразу покажу, чем она отличается:
И дам ссылку на demo и сам скрипт. Проект переехал на GitHub: https://github.com/alexxxnf/nf_pp/. Так же скрипт можно скачать через Composer.
UPD: добавлена разметка и стиль для корректного отображения пустых массивов и объектов.
UPD: добавлено отображение количества дочерних элементов массива или свойств объекта (число справа от названия ключа массива).
UPD: добавлена возможность сворачивать дочерние массивы массива (клик по количеству дочерних).
UPD: добавлено отображение файла и строки, откуда была вызвана функция.
UPD: теперь параметры в функцию можно передавать не массивом, а поштучно, причём в любом порядке. Подробнее.
Что функция умеет
- выводить скалярные переменные, массивы, объекты, ресурсы;
- выделять цветом тип данных;
- выделять цветом область видимости свойств;
- явно отображать значения булевых переменных и
NULL
; - выводить тип ресурса;
- автоматически обрезать длинные строки;
- выводить массив в виде дерева, с возможностью сворачивания узлов (ради чего всё это было затеяно);
- выводить дерево в свёрнутом виде или развёрнутым до определённого ключа;
- отображать файл и строку, откуда была вызвана функция;
- засекать время, прошедшее между двумя вызовами функции;
- искать текст в ключах и значениях массивов.
И самое главное
Никаких внешних зависимостей!
Как использовать
Нужно подключить файл nf_pp.php
include 'nf_pp.php';
и можно пользоваться
pp( $val );
Опции
Вторым аргументом в функцию можно передать массив параметров.
pp( $val, array( 'trimString' => 0 ) );
Доступны такие опции:
trimString |
До какой длины обрезать строки. По умолчанию — 1000 символов. 0 — не обрезать совсем. |
autoCollapsed |
Выводить дерево в свёрнутом виде. По умолчанию — FALSE . |
autoOpen |
Массив ключей или один ключ, до которого нужно развернуть дерево. Автоматически включает параметр autoCollapsed . |
UPD: мне надоело передавать параметры в функцию массивом и я сделал, чтобы их можно было передавать прямо так, причём в любом порядке. Пример:
pp( $val, 300, 'КириЛлиЦА' );
или
pp( $val, 'КириЛлиЦА', 0 );
или
pp( $val, 'КириЛлиЦА' );
Парамертры определяются по типу. Если передано число, то это — trimString
, если булев параметр, то это — autoCollapsed
; если строка или массив, то это — autoOpen
.
Примеры использования
Просто вывести массив
pp( $val );
Вывести массив в свёрнутом виде
pp( $val, array( 'autoCollapsed' => TRUE ) );
Вывести массив, раскрытый до ключей «c» и «subarray»
pp( $val, array( 'autoOpen' => array( 'c', 'subarray' ) ) );
Вывести массив, раскрытый до ключа «c»
pp( $val, array( 'autoOpen' => array( 'c' ) ) );
или
pp( $val, array( 'autoOpen' => 'c' ) );
Почему не FirePHP
FirePHP — это плагин к Firefox и небольшая библиотечка на PHP, которая позволяет прямо из PHP выводить информацию в консоль Firebug. Все данные пересылаются в заголовках, поэтому внешний вид HTML-страничек не портится и можно нормально отлаживать AJAX.
Так почему же не FirePHP?
- FirePHP работает только в Firefox.
- Nginx не даёт пересылать большие заголовки, поэтому нельзя работать с большими массивами (актуально для Битрикса).
Почему не Xdebug
Xdebug — это модуль для PHP, добавляющая в разработку на PHP такие удобства, как точки останова, пошаговое выполнение и наблюдение за выражениями.
Но!
- Xdebug — это модуль для PHP, который нужно специально устанавливать на сервер.
- Xdebug существенно замедляет работу сайта, а значит включать его на боевом сервере нельзя.
И еще раз скрипт. Проект переехал на GitHub: https://github.com/alexxxnf/nf_pp/.
Но он все равно вывел в развернутом виде весь массив((
Array(98)
[Помещение] => 7599
[Цвет арматуры] => 1992
[Серия] => 1952
[Гарантийный срок] => 1946
[Торговая группа] => 1931
Может, я что то ни так понял? Но все равно спасибо за работу!