标签与其后续内容分组为嵌套数组
" />
本文介绍如何使用 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 片段的理想起点。











