3

可能重复:
创建使用 print_r 打印的数组

如何从使用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
)
4

2 回答 2

9

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

但是var_export(),如果您的日志是使用var_export(). 这样,您只需要eval()检索导出的数组。

于 2013-01-08T15:51:14.520 回答
4

的输出print_r()不是为解析而设计的;它旨在供开发人员阅读以进行调试。您不应该尝试解析它。

如果您真的必须解析这种性质的 PHP 数据转储,那么该var_export()函数就是为这种事情而设计的。但是,我也不建议对此进行解析——它仍然不太可能是您的最佳解决方案。

如果您打算存储数组结构的字符串表示形式,然后再对其进行解析,则最好使用serialize()/unserialize()函数或json_encode()/json_decode()函数。

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

简而言之,不要解析print_r()输出;使用json_encode()/json_decode()代替。

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

于 2013-01-08T15:59:53.953 回答