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


Я работаю на сайте 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 75

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_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() все вкладки с пробелами для форматирования его в файле журнала.