将空格前置为print_r输出

时间:2014-04-18 12:06:07

标签: php arrays string whitespace prepend

在PHP中,我编写了一个函数来根据调试回溯中的深度缩进echo的行:

function echon($string){
  $nest_level = count(debug_backtrace()) - 1; // minus one to ignore the call to *this* function
  echo str_repeat("  ", $nest_level) . $string . "\n";
}

我在每个函数的开头使用它来帮助调试;例如,
echon("function: Database->insert_row");

我想为print_r编写类似的函数,但我不确定如何。在查看了print_r的文档之后,我了解到将可选参数true传递给它会使它返回一个字符串,但该字符串格式奇怪;如果我没有回应它,它看起来像这样:

print_r返回字符串是:

Array
(
    [uid] => 1
    [username] => user1
    [password] => $2y$10$.XitxuSAaePgUb4WytGfKu8HPzJI94Eirepe8zQ9d2O1oOCgqPT26
    [firstname] => devon
    [lastname] => parsons
    [email] => 
    [group] => 
    [validated] => 0
    [description] => 
    [commentscore] => 0
    [numberofposts] => 0
    [birthdate] => 1992-04-23
    [location] => 
    [signupdate] => 0000-00-00
    [personallink] => 
)

所以我原本以为它会返回单行响应,我可以手动爆炸并以相同的方式缩进,但它是多行的,我不知道接下来要查找什么。我查看了php文档中的字符串,看看是否有某种方法可以一次提取一行,或者基于新行爆炸它,但我什么也没找到,谷歌搜索没有发现类似的东西。

问题:如何在print_r的结果中添加空格?

编辑:示例欲望输出(假设我从1的深度调用我的函数)

    Array
    (
        [uid] => 1
        [username] => user1
        [password] => $2y$10$.XitxuSAaePgUb4WytGfKu8HPzJI94Eirepe8zQ9d2O1oOCgqPT26
        [firstname] => devon
        [lastname] => parsons
        [email] => 
        [group] => 
        [validated] => 0
        [description] => 
        [commentscore] => 0
        [numberofposts] => 0
        [birthdate] => 1992-04-23
        [location] => 
        [signupdate] => 0000-00-00
        [personallink] => 
    )

1 个答案:

答案 0 :(得分:1)

这应该做你想要的:

function print_rn($array)
{
    $nest_level = count(debug_backtrace()) - 1; // minus one to ignore the call to *this* function
    $lines = explode("\n", print_r($array, true));

    foreach ($lines as $line) {
        echo str_repeat("  ", $nest_level) . $line . "\n";
    }
}

说明:

print_r接受第二个参数,它允许您返回值而不是将其打印出来。然后,您可以使用explode函数(PHP的string_split函数)将返回的字符串拆分为每个换行符的数组。现在你有了一系列的线条。

使用一系列行,可以很容易地迭代每一行并使用适当数量的空格打印它。