Как вывести (в журнал) многоуровневый массив в формате, удобочитаемом для человека?


Я работаю на сайте drupal, и при отладке мне всегда приходится читать длинные вложенные массивы. В результате большая часть моей жизни тратится на использование клавиш со стрелками, возврат и табуляция, чтобы разделить более 1000 символьных строк на вложенный, читаемый формат.

Для разработчиков drupal я не могу использовать dsm() разработчика, так как я работаю с многоступенчатыми формами #ahah/#ajax, и я могу выводить массивы только в журнал ошибок, а не на экран.

Визуальный пример:

Зло:

array ( 'form_wrapper' => array ( '#tree' => true, '#type' => 'fieldset', '#prefix' => '', '#suffix' => '', '#value' => '', 'name' => array ( '#type' => 'textfield', '#title' => NULL, '#size' => 60, '#maxlength' => 60, '#required' => false, '#description' => NULL, '#attributes' => array ( 'placeholder' => 'Email', ), '#post' => array ( 'form_wrapper' => array ( 'name' => '', 'pass' => '', ),
...

Хорошо:

array ( 
'form_wrapper' => array ( 
    '#tree' => true, 
    '#type' => 'fieldset', 
    '#prefix' => '<div>', 
    '#suffix' => '</div>', 
    '#value' => '', 
    'name' => array ( 
        '#type' => 'textfield', 
        '#title' => NULL, 
        '#size' => 60, 
        '#maxlength' => 60, 
        '#required' => false, 
        '#description' => NULL, 
        '#attributes' => array ( 
            'placeholder' => 'Email', 
        ), 

Редактировать: Извините, под "не выводить на экран" я подразумевал системные сообщения drupal, в которых можно выводить массивы в интерактивном вложенном формате (с помощью devel.module).

 75
Author: Mark Shiraldi, 2012-08-09

6 answers

Если вам нужно записать ошибку в журнал ошибок Apache, вы можете попробовать следующее:

error_log( print_r($multidimensionalarray, TRUE) );
 156
Author: Akhilraj N S, 2016-11-13 01:00:14

Http://php.net/manual/en/function.print-r.php Эту функцию можно использовать для форматирования вывода,

$output = print_r($array,1);

$output является строковой переменной, ее можно регистрировать, как и любую другую строку. В чистом php вы можете использовать trigger_error

Бывший. trigger_error($output);

Http://php.net/manual/en/function.trigger-error.php

Если вам нужно отформатировать его также в html, вы можете использовать <pre> тег

 24
Author: Fivell, 2012-08-09 14:16:06

Простые вещи:

Использование print_r, var_dump или var_export должно получиться довольно красиво, если вы посмотрите на результат в режиме просмотра исходного кода, а не в режиме HTML, или, как сказал @Joel Ларсон, если вы обернете все в тег <pre>.

print_r лучше всего подходит для удобства чтения, но он не выводит значения null/false.

var_dump лучше всего подходит для проверки типов значений и длин, а также нулевых/ложных значений.

var_export аналогичен var_dump, но его можно использовать для получения сброшенной строки.

В формат, возвращаемый любым из них, имеет правильный отступ в исходном коде, и var_export может использоваться для ведения журнала, поскольку его можно использовать для возврата сброшенной строки.

Продвинутый материал:

Используйте плагин xdebug для PHP, который выводит var_dump в виде строк в формате HTML, а не в формате необработанного дампа, а также позволяет вам предоставить пользовательскую функцию, которую вы хотите использовать для форматирования.

 5
Author: Mihai Stancu, 2012-08-09 13:59:43

Модуль разработки Drupal имеет другие полезные функции, в том числе те, которые позволяют печатать отформатированные массивы и объекты в файлы журналов. Смотрите руководство по адресу http://ratatosk.net/drupal/tutorials/debugging-drupal.html

Дд()

Записывает любую переменную в файл с именем"drupal_debug.txt "во временном каталоге сайта. Все выходные данные этой функции добавляются в файл журнала, что позволяет легко увидеть , как изменяется содержимое переменной по мере измените свой код.

Если вы используете Mac OS X, вы можете использовать консоль ведения журнала для мониторинга содержимое файла журнала.

Если вы используете разновидность Linux, вы можете использовать команду "tail -f drupal_debug.txt "чтобы наблюдать, как данные заносятся в файл.

 2
Author: nmc, 2012-08-09 14:13:55

Это поможет вам

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

РЕДАКТИРОВАТЬ

Использование echo '<pre>'; бесполезно, но var_export($var); сделает то, чего вы ожидаете.

 1
Author: code-jaff, 2012-08-09 14:17:22

Вы должны иметь возможность использовать var_dump() в теге pre. В противном случае вы могли бы изучить возможность использования библиотеки, такой как dump_r.php : https://github.com/leeoniya/dump_r.php

Мое решение неверно. ОП искал решение, отформатированное с пробелами для хранения в файле журнала.

Решением может быть использование буферизации вывода с помощью var_dump, а затем str_replace() для всех вкладок с пробелами для форматирования в файле журнала.

 0
Author: Joel Larson, 2012-08-09 14:03:35