我正在寻找文章中的第一个 h2。找到后,查找所有 h3,直到找到下一个 h2。冲洗并重复,直到找到所有标题和副标题。
在您立即将此问题标记或关闭为重复解析问题之前,请注意问题标题,因为这与基本节点检索无关。我已经把那部分记下来了。
我使用DOMDocument
来解析 HTML DOMDocument::loadHTML()
, DOMDocument::getElementsByTagName()
并DOMDocument::saveHTML()
检索文章的重要标题。
我的代码如下:
$matches = array();
$dom = new DOMDocument;
$dom->loadHTML($content);
foreach($dom->getElementsByTagName('h2') as $node) {
$matches['heading-two'][] = $dom->saveHtml($node);
}
foreach($dom->getElementsByTagName('h3') as $node) {
$matches['heading-three'][] = $dom->saveHtml($node);
}
if($matches){
$this->key_points = $matches;
}
这给了我类似的输出:
array(
'heading-two' => array(
'<h2>Here is the first heading two</h2>',
'<h2>Here is the SECOND heading two</h2>'
),
'heading-three' => array(
'<h3>Here is the first h3</h3>',
'<h3>Here is the second h3</h3>',
'<h3>Here is the third h3</h3>',
'<h3>Here is the fourth h3</h3>',
)
);
我希望有更多类似的东西:
array(
'<h2>Here is the first heading two</h2>' => array(
'<h3>Here is an h3 under the first h2</h3>',
'<h3>Here is another h3 found under first h2, but after the first h3</h3>'
),
'<h2>Here is the SECOND heading two</h2>' => array(
'<h3>Here is an h3 under the SECOND h2</h3>',
'<h3>Here is another h3 found under SECOND h2, but after the first h3</h3>'
)
);
我并不完全在寻找代码完成(如果您觉得这样做会更好地帮助其他人 - 继续),但或多或少的指导或建议是朝着正确的方向完成一个嵌套数组,就像上面一样。