有没有办法解析print_r的输出

时间:2013-01-08 15:43:42

标签: php arrays string parsing

  

可能重复:
  Create array printed with print_r

How create an array from the output of an array printed with print_r?的重复 这也有一个很好的代码示例来解决这个问题

我需要撤消一个输出为print_r($data,true)的错误日志 示例数据如下所示:

Array
(
    [subject] => this is the subject
    [body] => <p>Dear user,</p><p>this is the body of the email</p>
    [from_id] => 0
    [from_email] => admin@karakas.org
    [to] => Array
        (
            [0] => Array
                (
                    [id] => 0
                    [email] => 64909
                )

        )

    [send_to_inbox] => 1
)

2 个答案:

答案 0 :(得分:6)

在PHP手册中,评论中有print_r_reverse()个函数: http://php.net/manual/en/function.print-r.php

但是,如果使用var_export()生成日志,var_export()可以替代。这样,您只需要eval()来检索导出的数组。

答案 1 :(得分:3)

print_r()的输出不是为解析而设计的;它被设计为由开发人员读取以进行调试。你不应该试图解析它。

如果你真的必须解析这种性质的PHP数据转储,那么var_export()函数就是针对这种情况的。但是,我也不建议解析这个问题 - 它仍然不太适合你。

如果您打算存储数组结构的字符串表示形式,然后再解析它,那么最好使用serialize() / unserialize()函数或{{1} } / json_encode()函数。

这两种方法都将为您提供更可靠,更易于解析的数据转储格式。在这两者中,我每次都推荐json_decode(),因为它不仅易于使用,而且还支持其他语言,易于手动阅读和紧凑。

简而言之,不要解析json_encode()输出;请改用print_r() / json_encode()

http://uk1.php.net/manual/en/function.json-encode.php

相关问题