如何控制 PHP print_r() 方法的空格



当我使用 print_r($array); 方法时,我的 PHP 副本缩进了四个空格。如何将此设置更改为使用 X 个空格(或制表符)?顺便说一句,我没有看到与 php.ini 文件相关的内容。

如何将其

保存到变量中,而不是对其进行修改(在函数中)? print_r没有根据文档修改输出的特殊设置。

$var = print_r($your_array, true);
$var = str_ireplace('    ',' ',trim($var));
var_dump($var);

由于文档没有指定这一点,我搜索了 PHP 源代码以查看print_r的作用以及它从哪里获得缩进值。

这 4 个空格被硬编码到源中。print_r()背后的 C 函数在到达实际生成输出的函数之前会经过其他几个函数,此函数使用 PRINT_ZVAL_INDENT 常量来确定每个缩进获得多少空格。

该函数直接检索常量,没有围绕它的逻辑来查看是否有覆盖它的配置值或环境变量。因此,如果您想修改此值以print_r()缩进不同数量的空格,则必须检查源代码,将常量更改为4以外的其他值,然后从源代码编译 PHP。

function print_rt($obj, $spaces="  ", $return=false) {
    /* © 2022 Peter Kionga-Kamau. Free for unrestricted use.
       Notes: - Not concerned about performance here since print_r is a debugging tool 
              - Single preg_replace() will substitute spaces in contents, hence the loop.
    */ 
    $out = explode("n",print_r($obj,1));
    foreach ($out as $k=>$v) $out[$k] = preg_replace("/(( ){4})/", $spaces, substr($v,0,strlen($v)-strlen(ltrim($v)))).ltrim($v);
    if($return) return implode("n",$out); echo implode("n",$out);
}

用法:

print_rt($obj);

实际上缩进是由 html 的 "pre" 标签给出的 @see 这里要实际编辑缩进,请使用 css 作为

pre {
    display: block;
    font-family: monospace;
    white-space: pre;
    margin: 1em 0;
}

并编辑白色间距的适当性。

最新更新