如何快速将HTML表格转换为PHP数组?

3
最新版本的PHP中是否有专门设计用于辅助此任务的内置函数?
6个回答

7
使用 DOM 解析器,例如 SimpleXML,将 HTML 代码拆分为节点,并遍历这些节点以构建数组。
对于损坏/无效的 HTML,SimpleHTMLDOM 更加宽容(但它不是内置的)。

1
强制建议使用第三方替代SimpleHtmlDom的工具,这些工具实际上使用DOM而不是字符串解析:phpQueryZend_DomQueryPathFluentDom - Gordon

1

在编程中,使用本地DOM解析器的替代方法可以是使用YQL。这样,您就不必自己进行实际解析。YQL Web服务使应用程序能够查询、过滤和组合来自互联网上不同来源的数据。

例如,要获取给定网址上具有类"example"的HTML表格

http://www.w3schools.com/html/html_tables.asp

你可以做到

$yql = 'http://tinyurl.com/yql-table-grab';
$yql = json_decode(file_get_contents($yql));
print_r( $yql->query->results );

我已经缩短了URL,以免影响答案。 $yql 实际上链接到YQL API,添加一些选项并包含查询:

select * from html 
    where xpath="//table[@class='example']" 
    and url="http://www.w3schools.com/html/html_tables.asp"

YQL 可以返回 JSON 和 XML。我已经让它返回 JSON 并对其进行解码,结果是嵌套的 stdClass 对象和数组结构(因此并非全部是数组)。您必须确定它是否符合您的需求。

您可以尝试交互式 YQL 控制台以查看其功能


1

如果HTML代码干净且始终相同,则字符串替换和分割将起作用,但一旦出现新属性,它就会中断。 因此,唯一可靠的解决方案是使用正则表达式或XML / HTML解析器。 请查看http://php.net/manual/en/book.dom.php


使用正则表达式解析HTML不可靠,因为HTML不是规则的。 - Gordon
@Gordon,preg_match_all('/<tr>\s*<td[^>]*>((?:<td.+?</td|.)*?)</td>/si',$html,$matches); 问题出在哪里? - Hydrino
@Gordon,我理解你的想法,尽管HTML表格与HTML的其他部分相比相当规则,但由于问题涉及表格,我对我的解决方案非常有信心。 - Hydrino

0

-1

-2

你可以使用explode函数将表格的列和行转换为数组。

参见:php explode


explode()对分割HTML表格结构没有帮助,是吗? - Pekka
你需要注意结束标签,但是像这样拆分表格:$rows = explode("<tr>", $tablehtml); 可能是一种选择。但我同意你和@amora遍历DOM似乎是更好的方式。 - rgroli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接