
本文介绍如何使用 PHP 的 DOMDocument 高效解析两列 HTML 表格(<th>+<td> 每行一对),生成结构清晰的二维关联数组,避免按列遍历导致的错位问题。
本文介绍如何使用 php 的 domdocument 高效解析两列 html 表格(`
在处理 HTML 表格数据时,一个常见误区是分别提取所有 <th> 和 <td> 节点再尝试“配对”——这容易因 DOM 结构变动、空行或嵌套干扰而引发索引错位。更稳健的做法是以行为单位遍历:逐个获取 <tr> 元素,再在每个 <tr> 内部精准定位其子 <th> 和 <td>,从而天然保证键值对应关系。
以下为推荐实现方案:
$htmlContent = '<table>
<tr>
<th>test1</th>
<td>test1-1</td>
</tr>
<tr>
<th>test2</th>
<td>test2-2</td>
</tr>
</table>';
$dom = new DOMDocument();
libxml_use_internal_errors(true); // 忽略 HTML 解析警告(如缺少 doctype)
$dom->loadHTML($htmlContent);
libxml_clear_errors();
$result = [];
foreach ($dom->getElementsByTagName('tr') as $row) {
$thNode = $row->getElementsByTagName('th')->item(0);
$tdNode = $row->getElementsByTagName('td')->item(0);
// 安全检查:确保 th 和 td 存在,避免 Notice 错误
if ($thNode && $tdNode) {
$result[] = [
'name' => trim($thNode->textContent),
'value' => trim($tdNode->textContent)
];
}
}
var_export($result);输出结果为:
[
['name' => 'test1', 'value' => 'test1-1'],
['name' => 'test2', 'value' => 'test2-2']
]✅ 关键优势:
立即学习“前端免费学习笔记(深入)”;
- 语义准确:每行 <tr> 天然封装一组逻辑数据,无需手动维护跨列索引;
- 鲁棒性强:自动跳过无 <th> 或 <td> 的异常行;
- 可扩展性好:若后续表格变为三列(如 <th>name</th><td>value</td><td>unit</td>),只需在循环内添加对应字段即可。
⚠️ 注意事项:
- DOMDocument::loadHTML() 在处理不规范 HTML 时可能抛出警告,建议配合 libxml_use_internal_errors(true) 抑制;
- getElementsByTagName() 返回的是 DOMNodeList,需用 ->item(0) 获取首个匹配节点,避免直接访问不存在的索引;
- 使用 trim() 清除文本节点前后空白符,提升数据整洁度。
该方法简洁、可靠,适用于绝大多数两列配置型或键值对型 HTML 表格的结构化解析场景。



















