如何以人类可读的格式输出(到日志中)多级数组?

我在一个 Drupal 站点上工作,当调试时,我总是不得不通读长的,嵌套的数组。因此,我生命中的大部分时间都花在使用箭头键、返回键和制表符键上,以便将1000多个字符串分割成嵌套的、可读的格式。

对于 drupal devs,我不能使用 devel 的 dsm () ,因为我使用的是多步骤 # ahah/# ajax 表单,我只能将数组输出到错误日志,而不能输出到屏幕。

例子:

Evil:

数组(‘ form _ wrapper’= > array (’# tree’= > true,’# type’= > ‘ fieldset’,’# prefix’= >”,’# affix’= >”,’# value’= >”,‘ name’= > array (’# type’= > ‘ textfield’,’# title’= > NULL,’# size’= > 60,’# maxlength’= > 60,’# need’= > false,’# description’= > NULL,’# properties’= > array (‘ placeholder’= >’Email’,),’# post’= > array (‘ form _ wrapper’= > array (‘ name’= >”,‘ pass’= >”,) ,
..。

Good:

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 : 对不起,我说的“ not output to screen”是指通过 drupal 的系统消息,可以以可点击的嵌套格式(使用 develop.module)输出数组。

164636 次浏览

You should be able to use a var_dump() within a pre tag. Otherwise you could look into using a library like dump_r.php: https://github.com/leeoniya/dump_r.php

我的解决方案是不正确的。 OP 正在寻找一个解决方案,该解决方案使用空格格式存储在日志文件中。

A solution might be to use output buffering with var_dump, then str_replace() all the tabs with spaces to format it in the log file.

简单的东西:

使用 print_rvar_dumpvar_export应该可以很好地完成这项工作,如果您在查看源代码模式下查看结果,而不是在 HTML 模式下,或者如@Joel Larson 所说,如果您将所有内容包装在 <pre>标记中。

print_r的可读性最好,但它不打印 null/false 值。

var_dump最适合检查值和长度的类型以及 null/false 值。

var_export类似于 var_dump,但是它可以用来获取转储字符串。

其中任何一个返回的格式都在源代码中正确缩进,var_export可用于日志记录,因为它可用于返回转储的字符串。

先进的东西:

使用 PHP 的 xdebug 插件将 var_dump打印为 HTML 格式的字符串,而不是原始转储格式,并且还允许提供用于格式化的自定义函数。

Http://php.net/manual/en/function.print-r.php 这个函数可以用来格式化输出,

$output = print_r($array,1);

$output是一个字符串变量,它可以像其他字符串一样被记录

Ex. trigger_error($output);

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

如果还需要格式化为 html 格式,可以使用 <pre>标记

Drupal 的 开发模块还有其他有用的功能,包括可以打印格式化的数组和对象来记录文件。请参阅 http://ratatosk.net/drupal/tutorials/debugging-drupal.html的指南

Dd ()

中名为“ drupal _ debug. txt”的文件中记录任何变量 site’s temp directory. All output from this function is appended to 日志文件,可以很容易地看到变量的内容 修改代码时进行更改。

如果您正在使用 MacOSX,您可以使用日志控制台来监视 日志文件的内容。

如果您正在使用一种 Linux 风格,您可以使用命令“ tail-f” Drupal _ debug. txt”来观察记录到文件中的数据。

这个能帮你

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

剪辑

使用 echo '<pre>';是没有用的,但是 var_export($var);会做你期望的事情。

如果需要将错误记录到 Apache 错误日志中,可以尝试这样做:

error_log( print_r($multidimensionalarray, TRUE) );

我只是想知道为什么没有人使用或推荐我喜欢的调试数组的方法:

error_log(json_encode($array));

在浏览器旁边,我在控制台中的服务器日志。

tail -f /var/log/apache2/error.log

Syntax

print_r(variable, return);

variable 需要. Specifies the variable to return information about

返回 可以选择。当设置为 true 时,此函数将返回信息(而不是打印)。默认是错误的

例子

error_log( print_r(<array Variable>, TRUE) );