我正在研究一个drupal站点,在调试时,我总是要阅读长的嵌套数组.因此,我的大部分时间都花在使用箭头,返回和制表键上,将1000多个字符串拆分成嵌套的可读格式.
对于drupal devs,我不能使用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',
),
Run Code Online (Sandbox Code Playgroud)
编辑:对不起,通过"不输出到屏幕",我的意思是通过drupal的系统消息,可以以可点击的嵌套格式输出数组(使用devel.module).
Akh*_*N S 180
如果您需要将错误记录到Apache错误日志,您可以尝试这样做:
error_log( print_r($multidimensionalarray, TRUE) );
Run Code Online (Sandbox Code Playgroud)
Fiv*_*ell 24
http://php.net/manual/en/function.print-r.php 此函数可用于格式化输出,
$output = print_r($array,1);
Run Code Online (Sandbox Code Playgroud)
$output是一个字符串变量,它可以像其他每个字符串一样记录.在纯PHP中你可以使用trigger_error
防爆. trigger_error($output);
http://php.net/manual/en/function.trigger-error.php
如果你还需要在html中格式化它,你可以使用<pre>标签
wit*_*ich 14
我只是想知道为什么没有人使用或推荐我喜欢的调试数组的方式:
error_log(json_encode($array));
Run Code Online (Sandbox Code Playgroud)
在我的浏览器旁边,tail我的服务器登录控制台,例如。
tail -f /var/log/apache2/error.log
Run Code Online (Sandbox Code Playgroud)
虽然输出是否可读是有争议的,但它仍然是我阅读它的首选方式,并且看起来像这样:
[Tue Dec 13] [...] AH01071: Got error 'PHP message: {"form_wrapper":{"#tree":true,
"#type":"fieldset","#prefix":"","#suffix":"","#value":"","name":{"#type":
"textfield","#title":null,"#size":60,"#maxlength":60,"#required":false,
"#description":null,"#attributes":{"placeholder":"Email"},"#post":{
`"form_wrapper":{"name":"","pass":""}}}}}', referer: http://localhost/
Run Code Online (Sandbox Code Playgroud)
使用print_r,var_dump或者var_export应该做的,如果你看看结果在查看源代码模式不是在HTML模式或@Joel拉尔森,如果你包裹在一切说的话是很好的<pre>标记.
print_r 最好是为了可读性,但它不会打印null/false值.
var_dump 最适合检查值和长度的类型以及null/false值.
var_export是simmilar var_dump但它可以用来获取转储的字符串.
任何这些返回的格式都在源代码中正确缩进,var_export可用于记录,因为它可用于返回转储的字符串.
使用PHP的xdebug插件,它将var_dumpHTML 打印为HTML格式的字符串,而不是原始转储格式,还允许您提供要用于格式化的自定义函数.