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

我在一个Drupal网站上工作,当我debugging时,我总是不得不阅读长,嵌套的数组。 因此,我生活中的很大一部分时间都是使用箭头键,返回键和制表键来将1000多个string分成嵌套的可读格式。

对于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)。

如果你需要logging一个错误到Apache错误日志,你可以试试这个:

 error_log( print_r($multidimensionalarray, TRUE) ); 

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

 $output = print_r($array,1); 

$output是一个stringvariables,它可以像每隔一个string一样logging。 在纯php中,你可以使用trigger_error

防爆。 trigger_error($output);

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

如果你需要在html中格式化,你可以使用<pre>标签

简单的东西:

使用print_rvar_dumpvar_export应该可以做得很好,如果你在view-source模式而不是HTML模式下查看结果,或者@Joel Larson说如果你把所有的东西都包装在一个<pre>标签中。

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

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

var_export类似于var_dump但可用于获取转储的string。

这些格式返回的格式在源代码中正确缩进, var_export可以用于日志logging,因为它可以用来返回转储的string。

先进的东西:

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

Drupal的Devel模块还有其他有用的function,包括可以打印格式化数组和日志文件的对象。 请参阅http://ratatosk.net/drupal/tutorials/debugging-drupal.html上的指南;

DD()

将任何variableslogging到站点的临时目录中名为“drupal_debug.txt”的文件中。 这个函数的所有输出都附加到日志文件中,这样可以很容易地看到在修改代码时variables的内容如何变化。

如果您使用Mac OS X,则可以使用日志控制台来监视日志文件的内容。

如果您使用的是Linux的风格,您可以使用命令“tail -f drupal_debug.txt”来观察logging到文件的数据。

这将帮助你

echo '<pre>';

 $output = print_r($array,1); 

echo '</pre>';

编辑

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

你应该可以在pre标签中使用var_dump()。 否则,你可以看看使用像dump_r.php的库: https : //github.com/leeoniya/dump_r.php

我的解决scheme不正确。 OP正在寻找一个格式化为空格的解决scheme来存储在日志文件中。

解决scheme可能是使用var_dump输出缓冲,然后str_replace()所有带有空格的选项卡在日志文件中对其进行格式化。