我遇到了forach循环和replaceChild的问题,因为当我替换foreach循环的Child时,它会停止。我该如何防止这种行为?
这是我的代码;
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($this->template);
foreach ($dom->getElementsByTagName("func") as $pnode) {
echo "CALLED!";
$attr = $pnode->getAttribute('type');
$function = $pnode->nodeValue;
if (array_key_exists($function, parent::$located_functions)) {
$arr = parent::$located_functions[$function];
if (class_exists($arr[1])) {
$call = $arr[1]::$arr[0]();
$divnode = $dom->createElement("div");
$this->addHTML($divnode, $call);
$pnode->parentNode->replaceChild($divnode, $pnode);
echo "LNG: " . $dom->getElementsByTagName("func")->length;
$this->template = $dom->saveXML($pnode->parentNode);
}
}
}
在我开始编写脚本之前" $ dom-> getElementsByTagName(" func") - > length"是2," LNG:"在replaceChild之后给我1(因为我用$ call替换了它的HTML代码)。现在循环似乎停止了(也许他认为他已经完成了循环,因为长度现在为1,他的长度为1)。 如果我不调用replaceChild,它将按预期工作,但使用replaceChild它不起作用。 "调用"也只显示一次,因此if-clause不应该是问题。
但是我怎么能阻止这个呢?