我的 DOM 解析器 php 代码有什么问题?

What's wrong in my DOM parser php code?

HTML

$html='<h1>some text<h1>
sometext
<h2>some text</h2>
sometext
<h1>some text<h1>
sometext
<h2>some text</h2>
sometext
<h3>some text</h3>
sometext';

我需要用 div 包裹 h 个标签。父子关系就像 h1->h2->h3 等等。所以,我需要根据它

包装 div
$dom = new DOMDocument();
$dom->loadHTML($html);
$elements = $dom->getElementsByTagName('*');

        for ($i = 0; $i < $elements->length; $i++) {            
        $element = $elements->item($i);
        if ($element->tagName == 'h1'){ 
           $wrap1 = $dom->createElement('div');
           $wrap1->setAttribute('class', 'sect1');

            $wrap1->appendChild($element);
            $dom->appendChild($wrap1);
        }
        if ($element->tagName == 'h2'){ 
           $wrap2 = $dom->createElement('div');
           $wrap2->setAttribute('class', 'sect2');

            $wrap2->appendChild($element);
            $wrap1->appendChild($wrap2);
            $dom->appendChild($wrap1);
        }
    }     

echo $dom->saveHTML();

我的代码出了点问题,当我尝试执行它时,它一直在加载而不是传递输出,而且我不确定这段代码是否会得到我预期的输出,如下所示

<div class="sect1">
<h1>some text<h1>
sometext
<div class="sect2">
<h2>some text</h2>
sometext
</div>
</div>
<div class="sect1">
<h1>some text<h1>
sometext
<div class="sect2">
<h2>some text</h2>
sometext
<div class="sect3">
<h3>some text</h3>
 sometext
</div>
</div>
</div>

问题出在这里:

for ($i = 0; $i < $elements->length; $i++) { 
------------------^^^^^^^^^^^^^^^^^^

你每次都在添加新的项目,结果就是死循环。你可以这样解决:

for ($i = 0, $count = $elements->length; $i < $count; $i++) {