Php 有没有办法解析print\u r的输出
可能重复:Php 有没有办法解析print\u r的输出,php,arrays,string,parsing,Php,Arrays,String,Parsing,可能重复: 副本 这也有一个很好的代码示例来解决这个问题 我需要反转一个错误日志,该日志的输出为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 [f
副本 这也有一个很好的代码示例来解决这个问题 我需要反转一个错误日志,该日志的输出为
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
)
数组
(
[主题]=>这是主题
[body]=>亲爱的用户,这是电子邮件的正文
[来自\u id]=>0
[来自电子邮件]=>admin@karakas.org
[至]=>阵列
(
[0]=>阵列
(
[id]=>0
[电子邮件]=>64909
)
)
[发送到收件箱]=>1
)
在PHP手册中,注释中有一个print\u r\u reverse()
函数:
但是,如果您的日志是使用
var\u export()
生成的,则var\u export()
可以作为替代方法。这样,您只需eval()
即可检索导出的数组。print\r()的输出不是为解析而设计的;它被设计为供开发人员出于调试目的读取。您不应该试图解析它
如果您真的必须解析这种性质的PHP数据转储,那么该函数就是针对这种情况设计的。但是,我也不建议对其进行解析——它仍然不太可能是您的最佳解决方案
如果您打算存储数组结构的字符串表示形式,然后稍后对其进行解析,那么最好使用serialize()
/unserialize()
函数或json\u encode()
/json\u decode()
函数
这两种格式都将为您提供更可靠、更易于解析的数据转储格式。在这两种语言中,我每次都推荐json_encode()
,因为它不仅易于使用,而且还受到其他语言的支持,易于手动阅读,而且结构紧凑
简而言之,不要解析print\u r()
output;使用json\u encode()
/json\u decode()
虽然不是解决方案-如果您控制
错误日志
调用,将来您可以错误日志(序列化($data))代码>可以不序列化。如果您继续遇到此问题,您可以使用正则表达式来执行此操作。将来可能会考虑使用var\u export
而不是print\u r
。我不确定您是否可以简单地“反转”print\r
,因为字符串的开头/结尾不明确。当您说“反转”时,您希望以什么格式结束?这段代码(反向)会部署到生产环境中吗,或者只是一些脚手架来帮助您解决问题?(有些策略可能有效,也可能无效,这取决于你试图完成的任务。)在这里使用@hakre的脚本,我使用它,效果很好。