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

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

Для разработчиков drupal я не могу использовать devel 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).

Ответ 1

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

error_log( print_r($multidimensionalarray, TRUE) );

Ответ 2

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

$output = print_r($array,1);

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

Ex. trigger_error($output);

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

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

Ответ 3

Простой материал:

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

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

var_dump лучше всего проверять типы значений и длины и значения null/false.

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

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

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

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

Ответ 4

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

дд()

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

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

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

Ответ 5

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

echo '<pre>';удаp >

$output = print_r($array,1);

echo '</pre>';удаp >

ИЗМЕНИТЬ

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

Ответ 6

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

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

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