Более красивая / информативная альтернатива Var_dump в PHP? [закрыто]

130

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

Раверен
источник
39
я просто использую echo '<pre>'; print_r ($ var); exit; я даже не закрываю это. Думаю, я не порядочный
Funky Dude
Я отредактировал ссылку, указав на github, где я продолжаю разработку Kint, и если у вас все еще есть проблемы с ним, сообщите мне об этом любым способом.
raveren
1
Эй, Кинт классный! Это просто спасло мой день.
Иштван Удж-Месарош
2
Почему вопрос, который на 100% является рекламным объявлением программы, помещается в версию «я создаю свою собственную var_dump ()» ?? Первый вопрос: почему реклама продукта разрешена как вопрос?
m3nda
11
Потому что я сделал инструмент более года спустя после того, как задал вопрос. Я не знаю, что вас беспокоит, я создал более 10 тысяч зрелых инструментов с открытым исходным кодом и постоянно улучшаю его годы спустя. Я дал свой ответ на вопрос - по традиции в SO.
raveren

Ответы:

71

Спустя целый год работы и времени после того, как я спросил об этом, я наконец открыл исходный код своей версии var_dump, Kint. Об этом читайте на странице проекта , или прямо в github .

Вот скриншот:

Kint

Простите за вилку :)


РЕДАКТИРОВАТЬ: Я просто хотел бы напомнить комментаторам, что это не форум поддержки, если у вас возникли проблемы / вы хотите использовать функцию, сообщите о проблеме . Комментарии, запрашивающие поддержку, будут помечены для удаления.

raveren
источник
мне пришлось изменить размер шрифта и украсить код CSS, но хорошая работа, мне нравится ... исходящий от давнего пользователя
Krumo
1
какие изменения вы внесли, если вы считаете, что это улучшение, вы можете отправить мне изменения на raveren@gmail.com
raveren
Я привык к Krumo и хотел шрифты меньшего размера, а также украсил код CSS. Ничего такого, что можно было бы назвать настоящим улучшением, больше похоже на старую привычку :)
Quamis
ну, идея заключалась в том, что css должен быть сжат вместе с js, чтобы как можно меньше влиять на фактический вывод. Конечно, был запланирован хороший отступ сгенерированного источника, но сейчас у меня нет времени посвящать Кинту ..
raveren
2
Так же, как пример, Kint показывает защищенные и частные переменные, если вы сбрасываете объект, а krumo - нет (потому что только первый использует классы отражения, как я предполагаю). Вообще говоря, я обнаружил, что Кинт лучше; хотя мне также пришлось настроить css, чтобы сделать его более удобным (этот огромный шрифт не очень хорошо работает при сбросе тонны вложенных свойств). О, и код, стоящий за этим, не беспорядок, чего нельзя сказать о Крумо (извините, автор Крумо!)
Ман
45

Я предпочитаю var_dumpфункцию, предоставляемую расширением Xdebug : просто установите расширение (легко, как в Windows, так и в Linux) , и var_dumpполучите лучший результат:

  • лучшее форматирование
    • HTML
    • цвета
  • и у вас есть возможность настроить, сколько информации должно отображаться

И быстрый скриншот:

Xdebug


И, конечно же, Xdebug предоставляет множество других полезных вещей, таких как удаленная отладка (то есть графическая отладка вашего PHP-приложения, например, в Eclipse PDT) , профилирование, ...

Паскаль МАРТИН
источник
1
Мне нужно использовать этот класс форматирования xdebug на общем хосте. Есть ли способ включить его в мой личный проект?
Анюль Ривас 01
1
Если вы не являетесь администратором (root) своего сервера, вы, скорее всего, не сможете установить расширение PHP (я никогда не видел службы общего хостинга, которая установила бы ее для установки расширений PHP) ; так что нет, вы не сможете использовать Xdebug (в любом случае, установка его на рабочий сервер - не лучшая идея: в конце концов, это расширение для отладки) ; вам придется вернуться к реализации функции вывода переменных на основе PHP (см. другие ответы)
Паскаль МАРТИН,
1
да, мне просто нужно, чтобы класс отправлял мне какой-то вывод при возникновении ошибки.
Анюль Ривас
34

Я написал свой: REF ( demo ):

r () вывод

Планируется добавить рендеринг только текста и отображать информацию о входном выражении, как это делает Kint ...

хорошая задница
источник
4
Хорошая работа, очень хороший инструмент
ssuperczynski
2
REF - это круто, красочно, быстро. Я использую это все время.
Марти МакГи
2
Отличный инструмент, я только что перешел на него. Спасибо!
Андрис
Некоторые люди используют композитор, ну ... не я. Если вы создадите, dllя воспользуюсь этой «отладкой». Спасибо, и хорошей работы!
Alex
27

Вот мой, который я использую inline, очень полезен:

$pretty = function($v='',$c="&nbsp;&nbsp;&nbsp;&nbsp;",$in=-1,$k=null)use(&$pretty){$r='';if(in_array(gettype($v),array('object','array'))){$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").'<br>';foreach($v as $sk=>$vl){$r.=$pretty($vl,$c,$in+1,$sk).'<br>';}}else{$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").(is_null($v)?'&lt;NULL&gt;':"<strong>$v</strong>");}return$r;};

echo $pretty($some_variable);
Гильермо Филлипс
источник
2
Мне нравится эта функция - простая и понятная, и я уже говорил, что очень просто :)
derekdreery
Спасибо. Я использую это все время. Должен быть действительно встроен в PHP. Вы можете использовать собственное форматирование, используя второй параметр. например, echo $ pretty ($ some_variable, "-");
Гильермо Филлипс
7
Он прекрасно сочетает в себе все худшие возможности print_r, var_dump и var_export. Нет экранирования html, принимает только один параметр, зависает при рекурсии, не может возвращать вывод, и, в довершение всего, он полностью нечитаем . Я не хочу быть засранцем, но комментарии просто заставляют это казаться таким идеальным.
raveren
Спасибо за комментарий @Raveren. Если бы вы могли быть более конкретными, я улучшу свой ответ.
Гильермо Филлипс
2
ИМО, лучшее однострочное решение - это просто function pretty(){echo'<pre>';foreach(func_get_args()as $arg){ob_start();var_dump($arg);echo htmlentities(ob_get_clean())."\n#####\n#####\n\n";}die;}. Var_dump - очень подробная функция, она обрабатывает все крайние случаи PHP (которых много) и на 100% стабильна, хотя и не так удобочитаема. Но, в конце концов, если вы сочтете, что ваша реализация лучше всего подходит для вас, вы обязательно должны использовать ее.
raveren
16

Вы ищете Krumo ( Предупреждение, предупреждения Chrome о вредоносном ПО ).

Проще говоря, Krumo - это замена print_r () и var_dump (). По определению Krumo - это инструмент отладки (первоначально для PHP4 / PHP5, теперь только для PHP5), который отображает структурированную информацию о любой переменной PHP.

Пекка
источник
Это великолепно! Спасибо. +1
the_drow
2
когда я попробовал, он сломался. Я сообщил об этом, но без ответа и без новой версии
Mawg говорит восстановить Монику
2
@Pekka Ссылка выдает предупреждение о вредоносном ПО в Chrome.
Тим Пост
Сегодня krumo был обновлен этим парнем github.com/mmucklo/krumo (но Kint может быть лучше, подробнее)
lolesque
9

Я люблю Firephp плюс firebug

  • Он записывает информацию журнала с помощью заголовков, поэтому он не нарушает AJAX.
  • Дает вам очень красивое графическое представление переменных / объектов, которые вы регистрируете
  • Может отображать имя файла и номер строки, где происходит каждый оператор журнала
  • Простота использования в вашем проекте с процедурным или объектно-ориентированным API
Johrn
источник
8

Я использовал dBug, который имитирует отличный тег Coldfusion cfdump:

http://dbug.ospinto.com/examples.php

jClark
источник
Элегантное решение для любых разработчиков coldfusion, таких как я
верный программист
8

Мое (частичное) решение - просто добавить такую ​​функцию (с помощью Google Chrome):

<?
function console_dump($value)
{ 
?>
<script>
    console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>

Нажмите Ctrl + Shift + J (открывает консоль), и вы можете найти там структуру JSON. Еще более полезно для красивой печати ответов JSON, конечно.

Тим
источник
8

Полный пример того, что я использую ...

<pre>

<?php


//*********** Set up some sample data

$obj = new stdClass;
$obj->a=123;
$obj->pl=44;
$obj->l=array(31,32);

$options = array(
  'Orchestra'=>array(1=>'Strings', 8=>'Brass', 9=>$obj, 3=>'Woodwind', 16=>'Percussion'),
  2=>'Car',
  4=>'Bus',
  'TV'=>array(21=>'Only Fools', 215=>'Brass Eye', 23=>'Vic Bob',44=>null, 89=>false));


//*********** Define the function

function dump($data, $indent=0) {
  $retval = '';
  $prefix=\str_repeat(' |  ', $indent);
  if (\is_numeric($data)) $retval.= "Number: $data";
  elseif (\is_string($data)) $retval.= "String: '$data'";
  elseif (\is_null($data)) $retval.= "NULL";
  elseif ($data===true) $retval.= "TRUE";
  elseif ($data===false) $retval.= "FALSE";
  elseif (is_array($data)) {
    $retval.= "Array (".count($data).')';
    $indent++;
    foreach($data AS $key => $value) {
      $retval.= "\n$prefix [$key] = ";
      $retval.= dump($value, $indent);
    }
  }
  elseif (is_object($data)) {
    $retval.= "Object (".get_class($data).")";
    $indent++;
    foreach($data AS $key => $value) {
      $retval.= "\n$prefix $key -> ";
      $retval.= dump($value, $indent);
    }
  }
  return $retval;
}


//*********** Dump the data

echo dump($options);

?>
</pre>

Выходы ...

Array (4)
 [Orchestra] = Array (5)
 |   [1] = String: 'Strings'
 |   [8] = String: 'Brass'
 |   [9] = Object (stdClass)
 |   |   a -> Number: 123
 |   |   pl -> Number: 44
 |   |   l -> Array (2)
 |   |   |   [0] = Number: 31
 |   |   |   [1] = Number: 32
 |   [3] = String: 'Woodwind'
 |   [16] = String: 'Percussion'
 [2] = String: 'Car'
 [4] = String: 'Bus'
 [TV] = Array (5)
 |   [21] = String: 'Only Fools'
 |   [215] = String: 'Brass Eye'
 |   [23] = String: 'Vic Bob'
 |   [44] = NULL
 |   [89] = FALSE
Энтони Скэйф
источник
1
Я изменил \ n на PHP_EOL, и это прекрасно работает при использовании php из окна CMD
iewebguy 01
7

Вот мой:

class sbwDebug
{
    public static function varToHtml($var = '', $key = '')
    {
        $type = gettype($var);
        $result = '';

        if (in_array($type, ['object', 'array'])) {
            $result .= '
        <table class="debug-table">
            <tr>
            <td class="debug-key-cell"><b>' . $key . '</b><br/>Type: ' . $type . '<br/>Length: ' . count($var) . '</td>
            <td class="debug-value-cell">';

            foreach ($var as $akey => $val) {
                $result .= sbwDebug::varToHtml($val, $akey);
            }
            $result .= '</td></tr></table>';
        } else {
            $result .= '<div class="debug-item"><span class="debug-label">' . $key . ' (' . $type . '): </span><span class="debug-value">' . $var . '</span></div>';
        }

        return $result;
    }
}

В стиле:

table.debug-table {
  padding: 0;
  margin: 0;
  font-family: arial,tahoma,helvetica,sans-serif;
  font-size: 11px;
}

td.debug-key-cell {
  vertical-align: top;
  padding: 3px;
  border: 1px solid #AAAAAA;
}

td.debug-value-cell {
  vertical-align: top;
  padding: 3px;
  border: 1px solid #AAAAAA;
}

div.debug-item {
  border-bottom: 1px dotted #AAAAAA;
}

span.debug-label {
  font-weight: bold;
}
Damon
источник
2
На самом деле неплохо. Вероятно, проголосовали бы больше, если бы вы показали пример вывода.
Mawg говорит восстановить Монику
@acSlater Подходит для меня, вам просто нужно создать sbwDebugкласс, который он забыл опубликовать, и поместить в него функцию.
Dennis98
6

Недавно я разработал бесплатное расширение chrome (в стадии разработки), чтобы украсить свои дампы var без библиотек, без предварительных тегов и без установки для каждого приложения. Все сделано с помощью JavaScript и regEx. Все, что вам нужно сделать, это установить расширение и готово. Я тоже работаю над версией Firefox. Вот страница GitHub. Я надеюсь, что скоро он будет доступен в интернет-магазинах Chrome и Firefox!

https://github.com/alexnaspo/var_dumpling

Вот пример вывода:

Пример вывода

оборота Алекс Наспо
источник
6
хороший чувак! просто скачали ваше расширение, и оно отлично работает! Спасибо!
coryj
5
Чувак ... спасибо. Я давно искал что-то подобное
broadbent
1
Нереально. Пока лучший вариант!
Christian
Пробовал с Firefox 15, он сказал несовместим. Есть ли шанс обойти это?
cyberfly
1
Это красиво, если бы я нашел его раньше!
2

Эти модные библиотеки великолепны ... кроме накладных расходов. Если вам нужен простой и красивый var_dump, который принимает бесконечные параметры, попробуйте мою функцию. Он добавляет простой HTML. Атрибуты данных также добавляются, если вы используете HTML5, более низкие версии просто игнорируют их, но позволяют легко открыть элемент в консоли браузера и получить немного больше информации, если того, что вы видите на экране, недостаточно.

Макет очень простой, без накладных расходов. Предоставляет массу информации для каждого параметра, включая такие вещи, как gettypeи даже classимя для дампов объектов (включая XML). Это проверено и верно, я использую его годами.

function preDump() {    //  use string "noEcho" to just get a string return only
    $args = func_get_args();
    $doEcho = TRUE; $sb;
    if ($args) {
        $sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;padding:0em 3em 1em 1em;"><legend><b>preDump: '.count($args).' Parameters Found.</b></legend>';
        foreach (func_get_args() as $arg) {
            if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(preDump: )[0-9]+/', 'preDump: '.(count($args)-1), $sb); continue; }
            $sb .= '<pre data-type="'.gettype($arg).'"';
            switch (gettype($arg)) {
                case "boolean":
                case "integer":
                    $sb .= ' data-dump="json_encode"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
                    $sb .= json_encode($arg);
                    break;
                case "string":
                    $sb .= ' data-dump="echo"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
                    $sb .= $arg;
                    break;
                default:
                    $sb .= ' data-dump="var_dump"';
                    if (is_object($arg)) $sb .= 'data-class="'.get_class($arg).'"';
                    $sb .= '><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')';
                    if (is_object($arg)) $sb .= ' ['.get_class($arg).']';
                    $sb .= '</b></p><p>';
                    ob_start();
                    var_dump($arg);
                    $sb .= ob_get_clean();
                    if (ob_get_length()) ob_end_clean();
            }
            $sb .= '</p></pre>';
        }
        $sb .= '</fieldset></div>';
    }
    else {
        $sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;"><legend><b>preDump: [ERROR]</b></legend><h3>No Parameters Found</h3></fieldset></div>';
    }
    if ($doEcho) echo($sb);
    return $sb;
}

И если вы используете Codeigniter, добавьте его тоже свой CI ЧРЕЗВЫЧАЙНО ПРОСТО. Сначала перейдите к application/config/autoload.phpи убедитесь, что helper 'string'включен.

$autoload['helper'] = array( 'string' ); 

Затем просто создайте файл с именем MY_string_helper.phpin application/helpersи просто вставьте функцию в типичный ifоператор для проверки существования.

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
    if (!function_exists('preDump')) {
        function preDump() {
            ...
        }
    }
//  DON'T CLOSE PHP

| ИЛИ |, если вы хотите пойти в другом направлении.

Следующий фрагмент аналогичен приведенному выше, за исключением того, что ваши переменные будут отображаться в консоли браузера. Иногда это может упростить отладку вызовов объектов sql и других вызовов массивов и объектов, в которых отсутствует имя ключа или что-то еще.

function consoleDump() {    //  use string "noEcho" to just get a string return only
    $args = func_get_args();
    $doEcho = TRUE; $sb;
    if ($args) {
        $sb = '<script type="text/javascript">console.log("<" + new Array('.(count($args) < 10 ? '49': '48').').join("-") + "[consoleDump: '.count($args).' items]" + new Array(50).join("-") + ">"); console.log([';

        foreach (func_get_args() as $i => $arg) {
            if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(consoleDump: )[0-9]+/', 'consoleDump: '.(count($args)-1), $sb); continue; }
            $sb .= '{ "type": "'.gettype($arg).'", ';
            switch (gettype($arg)) {
                case "boolean":
                case "integer":
                case "string":
                    $sb .= '"value": '.json_encode($arg);
                    break;
                default:
                    $sb .= '"value": '.json_encode($arg);
                    if (is_object($arg) || is_array($arg)) $sb .= ', "count": '.json_encode(count((array)$arg));
                    if (is_object($arg)) $sb .= ', "objectClass": "'.get_class($arg).'"';
            }
            $sb .= '}';
            if ($i < count($args)-1) $sb .= ', ';
        }
        $sb .= ']); console.log("<" + new Array(120).join("-") + ">"); </script>';
    }
    else {
        $sb = '<script type="text/javascript">console.log("<" + new Array(120).join("-") + ">");console.log("consoleDump: [ERROR] No Parameters Found");console.log("<" + new Array(120).join("-") + ">");</script>';
    }
    if ($doEcho) echo($sb);
    return $sb;
}

Работает со всем!

consoleDump($simpXMLvar, $_SESSION, TRUE, NULL, array( 'one' => 'bob', 'two' => 'bill' ), (object)array( 'one' => 'bob', 'two' => 'bill' ));


<------------------------------------------------[consoleDump: 6 items]------------------------------------------------->
[Object, Object, Object, Object, Object, Object] 
// This drops down to show your variables in JS objects, like:
    0: Object
        count: 4
        objectClass: "SimpleXMLElement"
        type: "object"
        value: Object
        __proto__: Object
        // ...etc...
<-----------------------------------------------------------------------------------------------------------------------> 
SpYk3HH
источник
1
Зачем беспокоиться о незначительном снижении производительности инструмента разработки? Эта функция буквально echo '<pre>';var_dump($var);echo '</pre>';плюс текст с добавлением нулевого значения.
raveren
@Raveren да, кроме preDump('value', TRUE, array( 'bob => 'bill' ), (object)array( 'bob => 'bill' )' is quick and easy and gives a nice layout visually in the browser that shows each variable passed in it's own "area" with a type label, thus making debugging quick and easy. And since it's a snippet i keep in my IDE's toolbox, i can recall it with ease on any needed page or while working with any library. But sure, it's just an echo 'pre'; var_dump` simple html, а не текст, добавляющий 0. лол кик. Если вам это не нравится, не используйте это. Просто предложение.
SpYk3HH
@Raveren И если вам это понравилось ... вам действительно понравится мое обновление: P
SpYk3HH
1

PHP Array Beautifier Этот простой инструмент принимает массив или объект, выводимый в PHP, такой как оператор print_r (), и форматирует его с помощью цветовой кодировки, чтобы легко читать ваши данные. http://phillihp.com/toolz/php-array-beautifier/

Ганболор Буддорж
источник
не работает с выводом var_dump, разрывает кавычки, выглядит очень запутанным для больших дампов.
raveren 09
1

Еще одна доморощенная версия:

http://github.com/perchten/neat_html

Мне нравится думать, что это довольно гибко. Он не нацелен на конкретную среду вывода, но имеет множество необязательных аргументов, которые вы можете указать, зачем изменять вывод / печать или поведение, а также некоторые постоянные настройки.

Аластер Брайн
источник
1

Если вы имеете дело с очень большими массивами в PHP, эта функция может помочь:

function recursive_print ($varname, $varval) {
  if (! is_array($varval)):
    print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
  else:
    print $varname . " = array();<br>\n";
    foreach ($varval as $key => $val):
      recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
    endforeach;
  endif;
}

Он в основном выгружает весь массив, где каждый элемент находится в отдельной строке, что полезно для поиска правильных полных путей для определенных элементов.

Пример вывода:

$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';

См .: Как экспортировать массив PHP, где каждая пара ключ-значение находится в отдельной строке?

оборота кенорб
источник
1

Я удивлен, что никто не упомянул самый простой (хотя и не очень красивый) код. Если вы просто хотите , чтобы получить читаемый вывод (без цвета или отступа), простой <pre>вокруг var_dumpработ, как в:

echo "<pre>";
var_dump($myvariable);
echo "</pre>";

Невозможно получить намного меньшие накладные расходы, чем это!

Sablefoste
источник
0

Я написал небольшой класс, похожий на Krumo, но его гораздо проще встроить в приложение.

Вот ссылка: https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php

И вот пример вывода: http://langpavel.php5.cz/debug_sample.html

langpavel
источник
Демоверсия не работает, хотя код доступен на GitHub
Mawg говорит, что нужно восстановить Монику
0

Я предпочитаю отладку из https://github.com/hazardland/debug.php, которая представляет собой библиотеку, содержащую только одну функцию с именем debug (вы можете просто скопировать эту функцию в свой проект или в свою библиотеку) . Типичный вывод debug () html выглядит так:

введите описание изображения здесь

Но вы можете выводить данные в виде простого текста с той же функцией (с 4-мя вкладками с отступом), как это (и даже при необходимости регистрировать их в файле):

string : "Test string"
boolean : true
integer : 17
float : 9.99
array (array)
    bob : "alice"
    1 : 5
    2 : 1.4
object (test2)
    another (test3)
        string1 : "3d level"
        string2 : "123"
        complicated (test4)
            enough : "Level 4"
БИОЛОГИЧЕСКАЯ ОПАСНОСТЬ
источник
0

TVarDumper

Это отличный инструмент, предназначенный для замены ошибочной функции PHP var_dumpи print_r, поскольку он может правильно идентифицировать рекурсивно ссылочные объекты в сложной структуре объектов. Он также имеет рекурсивный контроль глубины, чтобы избежать неопределенного рекурсивного отображения некоторых специфических переменных.

См: TVarDumper.php.


Для других альтернативных решений , которые обеспечивают более преимущества по сравнению с var_dumpи print_rи может поддерживать циклические ссылки, пожалуйста , проверьте: Используя print_r и var_dump с круговой ссылкой .


Дополнительные идеи см. Также: Как отлаживать сценарии PHP?

оборота кенорб
источник
0

Мой, более простой, для меня у меня мало знаний / времени, чтобы изменить инфраструктуру, установить xdebug и т. Д. И т. Д.

А в других случаях вам не нужно много, например, для простого веб-сайта WP

Поэтому я использую:

highlight_string("\n<?" . var_export($var, true) . "?>\n");

это действительно мне очень помогло.

но поскольку я предпочитаю среду DevConsole, я использую эту замечательную, но простую функцию:

https://codeinphp.github.io/post/outputting-php-to-browser-console/

Небольшая настройка:

<?php 

/**
 * Logs messages/variables/data to browser console from within php
 *
 * @param $name: message to be shown for optional data/vars
 * @param $data: variable (scalar/mixed) arrays/objects, etc to be logged
 * @param $jsEval: whether to apply JS eval() to arrays/objects
 *
 * @return none
 * @author Sarfraz
 */
function logConsole($name, $data = NULL, $jsEval = FALSE)
{
     if (! $name) return false;

     $isevaled = false;
     $type = ($data || gettype($data)) ? 'Type: ' . gettype($data) : '';

     if ($jsEval && (is_array($data) || is_object($data)))
     {
          $data = 'eval(' . preg_replace('#[\s\r\n\t\0\x0B]+#', '', json_encode($data)) . ')';
          $isevaled = true;
     }
     else
     {
          $data = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
     }

     # sanitalize
     $data = $data ? $data : '';
     $search_array = array("#'#", '#""#', "#''#", "#\n#", "#\r\n#");
     $replace_array = array('"', '', '', '\\n', '\\n');
     $data = preg_replace($search_array,  $replace_array, $data);
     $data = ltrim(rtrim($data, '"'), '"');
     $data = $isevaled ? $data : ($data[0] === "'") ? $data : "'" . $data . "'";

$js = <<<JSCODE
\n<script>
// fallback - to deal with IE (or browsers that don't have console)
if (! window.console) console = {};
console.log = console.log || function(name, data){};
// end of fallback

console.log('===== PHP Dump =====');
console.log('$name');
console.log('$type');
console.log($data);
console.log('===== / PHP Dump =====');
console.log('\\n');
</script>
JSCODE;

     echo $js;
} # end logConsole
Локка
источник
0

Другой вариант заключается в

composer require symfony/var-dumper --save-dev

Затем в вашем файле вы просто используете, dump($var) и вы получите такой результатвведите описание изображения здесь

GardenRouteGold
источник
0

Мне пришлось добавить здесь еще один ответ, потому что я действительно не хотел повторять шаги в других решениях. Это очень просто и не требует расширений, включает и т. Д., И это то, что я предпочитаю. Это очень просто и очень быстро.

Сначала просто json_encode рассматриваемую переменную:

echo json_encode($theResult);

Скопируйте полученный результат в редактор JSON по адресу http://jsoneditoronline.org/, просто скопируйте его в левую панель, нажмите « Копировать»>, и он распечатает JSON в действительно красивом древовидном формате.

Каждому свое, но, надеюсь, это поможет другим получить еще один хороший вариант! :)

zpert
источник