Красивый вывод PHP объекта или массива

Pretty Print PHP

При разработке на PHP часто требуется узнать значение той или иной переменной. При этом обычный var_dump или print_r далеко не идеально выполняет возложенную на него функцию. Если массив/объект большой, то просто невозможно понять что к чему относится и т.д. Устав мучаться с этой проблемой мы разработали для себя простенькую пару функций, способные вывести массив в действительно удобочитаемом виде. Вывод представляет собой древовидный список ключей->значений, способный сворачиваться/разворачиваться с помощью современного html-тега 'details'.

Функции представляют из себя основную функцию, которую и надо вызывать, и вспомогательную для неё, рекурсивную функцию, обходящую все элементы массива/объекта. CSS для них прописан самый простейший (отступ для дочерних элементов), а потому Вы можете запросто разукрасить их как Вам будет удобно. Код представлен ниже.


/**
 * Выводит массив в виде дерева
 * 
 * @param mixed - Массив или объект, который надо обойти
 * @param boolean - Раскрыть дерево элементов по-умолчанию или нет?
 * 
 * @return void
 */
function pretty_print($in,$opened = true){
    if($opened)
        $opened = ' open';
    if(is_object($in) or is_array($in)){
        echo '<div>';
            echo '<details'.$opened.'>';
                echo '<summary>';
                    echo (is_object($in)) ? 'Object {'.count((array)$in).'}':'Array ['.count($in).']';
                echo '</summary>';
                pretty_print_rec($in, $opened);
            echo '</details>';
        echo '</div>';
    }
}
function pretty_print_rec($in, $opened, $margin = 10){
    if(!is_object($in) && !is_array($in)) 
        return;

    foreach($in as $key => $value){
        if(is_object($value) or is_array($value)){
            echo '<details style="margin-left:'.$margin.'px" '.$opened.'>';
                echo '<summary>';
                    echo (is_object($value)) ? $key.' {'.count((array)$value).'}':$key.' ['.count($value).']';
                echo '</summary>';
                pretty_print_rec($value, $opened, $margin+10);
            echo '</details>';
        }
        else{
            switch(gettype($value)){
                case 'string':
                    $bgc = 'red';
                break;
                case 'integer':
                    $bgc = 'green';
                break;
            }
            echo '<div style="margin-left:'.$margin.'px">'.$key . ' : <span style="color:'.$bgc.'">' . $value .'</span> ('.gettype($value).')</div>';
        }
    }
}

Как видите - функции довольно просты. Для работы нужно лишь вместо print_r($array) использовать pretty_print($array) или pretty_print($array, false) чтобы оставить дерево закрытым по-умолчанию на выходе.

Если же лень подключать функции и т.п., то мы для Вас подготовили более простую возможность использовать данную фишку. Для этого просто передайте в https://www.w3strict.ru/ppp.php сериализованный функцией serialize() массив или объект в качестве параметра 'print' и вы получите это красивое дерево элементов, которое Вы можете просто вывести у Вас на сайте обычным эхо. То есть достатчно просто использовать echo+file_get_contents у себя на сайте для получения удобочитаемого вывода Вашей переменной c массивом/объектом, например echo file_get_contents('https://www.w3strict.ru/ppp.php?print='.urlencode(serialize($VASH_MASSIV)));, хотя крайне желательно использовать $_POST для корректной работы. Чтобы по-умолчанию дерево было закрыто передайте также параметр opened, равный true

Оставьте свой комментарий

Оставить комментарий от имени гостя

0
Your comments are subjected to administrator's moderation.
правилами и условиями.

Люди, участвующие в этой беседе