本文介绍如何使用 php 将混排的 html 字符串数组(含 ` ` 标题与紧随其后的 ` ` 等内容)按逻辑段落切分:每个 ` ` 及其后所有非 `` 元素归入同一子数组,最终生成结构化嵌套数组。 在构建 FAQ 页面、动态帮助文档或内容解析器时,常..."/>

如何将 HTML 中的 标签与其后续内容分组为嵌套数组

7次阅读

如何将 标签与其后续内容分组为嵌套数组 ” />

本文介绍如何使用 php 将混排的 html 字符串数组(含 `

` 标题与紧随其后的 `

` 等内容)按逻辑段落切分:每个 `

` 及其后所有非 `

` 元素归入同一子数组,最终生成结构化嵌套数组。

在构建 FAQ 页面、动态帮助文档或内容解析器时,常需处理类似如下原始 html 片段数组:

$input = [     "

While registration its showing email address already exists

", "

You can use one email address

", "

While registration its showing

", "

The usernames are unique.

", ];

目标是将其重组为「标题 + 对应答案内容」的分组结构,便于后续映射为 [‘ques’ => …, ‘ans’ => …] 格式的对象列表。

立即学习前端免费学习笔记(深入)”;

核心思路是:

为分组锚点,动态维护当前组索引,遇

则新建组,否则追加到当前组

php 实现简洁高效,推荐使用 str_contains()(PHP 8.0+)判断标签,兼顾可读性与性能:

$outputArray = []; $groupIndex = -1;  foreach ($input as $html) {     if (str_contains($html, '

')) { $groupIndex++; $outputArray[$groupIndex] = []; // 初始化新组 } $outputArray[$groupIndex][] = $html; }

执行后,$outputArray 即为所需嵌套结构:

[   ["

While registration...

", "

You can use...

"], ["

While registration...

", "

The usernames...

"] ]

注意事项

  • 输入数组必须保持语义顺序(即

    后紧跟其对应内容),否则逻辑失效;

  • 若需兼容 PHP ‘) 替换为 strpos($html, ‘

    ‘) !== false;

  • 实际项目中建议进一步清洗 HTML(如 strip_tags() 提取纯文本)或用 DOMDocument 做健壮解析,避免依赖字符串匹配;
  • 若需生成最终的 [{ques: “…”, ans: “…”}] 格式,可在分组后遍历 $outputArray,用 preg_match(‘/

    (.*?)/i’, $group[0], $q) 提取问题,并用 implode(”, array_slice($group, 1)) 合并答案内容。

该方法轻量、无外部依赖,是快速结构化 HTML 片段的理想起点。

text=ZqhQzanResources