You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用Simple HTML DOM提取多层嵌套div中的p标签内容

从嵌套div中提取所有p标签内容的PHP脚本修正方案

我来帮你搞定这个嵌套div里提取p标签内容的问题!先明确你的需求:给定最多15层嵌套的div结构,要把所有p标签的内容提取出来(顺序不限),最终输出Hi Hello Hey。

你之前写的递归思路是对的,但有几个小问题导致代码无法正常工作,我来帮你修正并解释:

原代码的问题点

  • getElementsByTagName返回的是DOMNodeList对象,不能直接访问innertext,必须遍历每个节点才能获取内容
  • 判断是否有子div时,不能用count($internalDiv),DOMNodeList的长度要通过->length属性获取
  • 递归时的变量名冲突:foreach ($internalDiv as $div)里的$div覆盖了函数参数的$div,会导致逻辑错误
  • 没有用合适的方式收集结果,直接echo会导致输出顺序混乱,而且难以后续处理

修正后的完整代码

<?php
// 你的目标HTML结构
$html = '<div> <div> <div> <p>Hi</p> </div> <p>Hello</p> </div> <p>Hey</p> </div>';

// 初始化DOM解析器
$dom = new DOMDocument();
// 关闭HTML规范检查的错误提示,避免不规范HTML导致的警告
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();

/**
 * 递归遍历div,提取所有p标签内容
 * @param DOMElement $divNode 当前遍历的div节点
 * @param array $result 存储结果的数组(引用传递)
 * @param int $currentLevel 当前嵌套层数,限制最多15层
 */
function divDigger($divNode, &$result, $currentLevel = 1) {
    // 超过15层嵌套则停止递归,符合需求限制
    if ($currentLevel > 15) {
        return;
    }

    // 提取当前div下的所有p标签
    $pTags = $divNode->getElementsByTagName('p');
    foreach ($pTags as $p) {
        // 获取p标签的纯文本内容,trim清理多余空格
        $result[] = trim($p->nodeValue);
    }

    // 获取当前div下的所有子div,递归处理
    $childDivs = $divNode->getElementsByTagName('div');
    foreach ($childDivs as $childDiv) {
        divDigger($childDiv, $result, $currentLevel + 1);
    }
}

// 存储所有p标签内容的数组
$pContents = [];
// 获取最外层的div节点(这里取第一个div作为根节点)
$rootDiv = $dom->getElementsByTagName('div')->item(0);
// 调用递归函数提取内容
divDigger($rootDiv, $pContents);

// 输出结果,用空格分隔
echo implode(' ', $pContents);
// 最终输出:Hi Hello Hey
?>

代码关键点说明

  1. DOMDocument解析:用PHP自带的DOM扩展来处理HTML,能正确解析嵌套结构,比字符串处理可靠得多
  2. 引用传递结果:通过&$result把结果数组在递归中传递,避免每次递归重新创建数组,方便收集所有内容
  3. 嵌套层数限制:加入$currentLevel参数,确保递归不会超过15层,符合你的需求
  4. 文本内容获取:用nodeValue获取p标签的纯文本,trim去掉多余的空格和换行,保证输出整洁
  5. 变量名规范:用$divNode和$childDiv避免变量名冲突,递归逻辑更清晰

如果你不需要严格限制15层,也可以去掉$currentLevel相关的判断,代码依然能正常工作。

内容的提问来源于stack exchange,提问作者parth agrawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:47:43