什么是最易于解析的PHP格式?

时间:2009-05-27 20:40:41

标签: php parsing format

在我的PHP文件中,我正在使用如下查询读取大量信息:

SELECT  GROUP_CONCAT(CONCAT('<comment><body><![CDATA[',body,']]></body>','<replier>',if(screen_name is not null and !anonymous,screen_name,''),'</replier>','<created>',created,'</created></comment>') SEPARATOR '')
                        FROM   idiscussion
                        LEFT JOIN
                               users
                        ON     idiscussion.uid=users.id
                        WHERE  idiscussion.iask_id = 1

是的,它就像xml格式,但似乎用PHP解析起来并不容易,

是否建议使用哪种格式以便以后轻松解析?

AS我需要将它们连接在一起,

您可以考虑这种情况:一次检索本主题下的1个主题和讨论。 1个主题对应多个讨论。如何在不将它连接在一起的情况下在1个查询中完成?

4 个答案:

答案 0 :(得分:2)

如果您从SQL数据库获取数据,那么不使用SQL将其破解为某种文本格式会更容易,而是执行常规查询并使用SQL函数来处理您的结果给出。

如果您最终需要将数据序列化到其他PHP客户端,我建议PHP's standard serialization format

答案 1 :(得分:0)

取决于数据结构,但是可以使用join()轻松地将值列表保存为以分号分隔的条目列表,然后使用split()轻松解析。

这非常简单,但对于稍微复杂的数据可能并不理想。

回答评论:如果数据包含分号,则需要根据需要进行转义。

答案 2 :(得分:0)

您可以使用DOMSimpleXML来解析XML文件,还可以使用JSONYAML。所有这些都非常容易使用,因为您可以依赖PHP的高级解析器。它们有优点和缺点,具体取决于您希望如何使用格式。

答案 3 :(得分:0)

我可以问为什么你不只是在没有连接数据的情况下检索数据

SELECT body,
       IF(screen_name IS NOT NULL AND !anonymous, screen_name, '') AS replier,
       created
FROM   idiscussion
LEFT JOIN
       users
ON     idiscussion.uid = users.id
WHERE  idiscussion.iask_id = 1

这应该像原始查询一样快速执行,并且您可以像访问任何其他结果集一样访问其数据。假设您正在使用MySQL而不使用PDO:

$result = mysql_query($sql);
if ($result) {
    while ($row = mysql_fetch_assoc($result)) {
        // $row is an associative array containing the current row's data.
    }
}

如果您需要创建XML但又想要以原始形式访问数据,只需在PHP中创建它。

$xml =
    '<comment>' .
         '<body><![CDATA[' . $row['body'] . ']]></body>' .
         '<replier>' . $row['replier'] . '</replier>' .
         '<created>' . $row['created'] . '</created>' .
    '</comment>';

如果数据尚未清理,您可能需要转义数据。您也可以使用XMLWriter等XML构建器,但这超出了本问题的范围。