Как вывести (в журнал) многоуровневый массив в формате, удобочитаемом человеком?
Я работаю на сайте 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_error
Ex.
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_dump
s как 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() все вкладки с пробелами для форматирования его в файле журнала.