Как вывести (в журнал) многоуровневый массив в формате, удобочитаемом человеком?
Я работаю на сайте drupal и при отладке мне всегда приходится читать длинные вложенные массивы. В результате большая часть моей жизни тратится на использование клавиш arrow, return и tab, чтобы разделить 1000+ символьных строк на вложенный, читаемый формат.
для разработчиков drupal я не могу использовать dsm () devel, поскольку я работаю с многоступенчатыми формами #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',
),
Edit: извините, под "не выводить на экран" я имел в виду системные сообщения drupal, где можно выводить массивы в интерактивном, вложенном формате (используя devel.модуль.)
6 ответов:
Если вам нужно записать ошибку в журнал ошибок Apache, вы можете попробовать это:
error_log( print_r($multidimensionalarray, TRUE) );
http://php.net/manual/en/function.print-r.php Эта функция может быть использована для форматирования вывода,
$output = print_r($array,1);
$outputявляется строковой переменной, она может быть зарегистрирована как и любая другая строка. В чистом PHP вы можете использоватьtrigger_errorEx.
trigger_error($output);http://php.net/manual/en/function.trigger-error.php
если вам нужно отформатировать его также в html, вы можете использовать
<pre>tag
простые вещи:
используя
print_r,var_dumpилиvar_exportдолжно сделать это довольно красиво, если вы посмотрите на результат в режиме просмотра исходного кода не в режиме HTML или как сказал @Joel Larson, если вы обернете все в<pre>- тег.
print_rлучше всего подходит для удобочитаемости, но он не печатает нулевые/ложные значения.
var_dumpлучше всего подходит для проверки типов значений и длин и нулевых/ложных значений.
var_exportаналогичноvar_dumpно это может быть используется для получения сброшенной строки.формат, возвращаемый любым из них, правильно отступается в исходном коде и
var_exportможет использоваться для ведения журнала, так как он может быть использован для возврата сброшенной строки.дополнительные материалы:
используйте плагин xdebug для PHP это печатает
var_dumps как HTML-форматированные строки, а не как формат raw-дампа, а также позволяет вам предоставить пользовательскую функцию, которую вы хотите использовать для форматирования.
в Drupal Devel module есть и другие полезные функции, включая те, которые могут печатать отформатированные массивы и объекты в файлы журналов. Смотрите руководство по адресу http://ratatosk.net/drupal/tutorials/debugging-drupal.html
dd ()
записывает любую переменную в файл с именем "drupal_debug.txt " в the временная директория сайта. Все выходные данные этой функции добавляются к файл журнала, что позволяет легко увидеть, как содержимое переменная изменение при изменении кода.
Если вы используете Mac OS X, вы можете использовать консоль ведения журнала для мониторинга содержимое файла журнала.
Если вы используете аромат Linux, вы можете использовать команду " tail-f drupal_debug.txt " для просмотра данных, записываемых в файл.
Это поможет вам
echo '<pre>';$output = print_r($array,1);
echo '</pre>';EDIT
используя
echo '<pre>';бесполезно, ноvar_export($var);будет делать то, что вы ожидаете.
вы должны иметь возможность использовать var_dump() в теге pre. В противном случае вы можете посмотреть на использование библиотеки, как dump_r.php: https://github.com/leeoniya/dump_r.phpмое решение неверно. OP искал решение, отформатированное с пробелами для хранения в файле журнала.
решение может заключаться в использовании буферизации вывода с var_dump, а затем str_replace() все вкладки с пробелами для форматирования его в файле журнала.