Php 如何检查dom节点列表是否已经有相同的节点
我需要通过PHPPhp 如何检查dom节点列表是否已经有相同的节点,php,domdocument,Php,Domdocument,我需要通过PHPDOMDocument 比如说,我们有这样的html: <div> <p>Some text</p> <p>Some text</p> </div> <section> <p>Some text</p> <p>Some text</p> <p>Some text</p> </sec
DOMDocument
比如说,我们有这样的html:
<div>
<p>Some text</p>
<p>Some text</p>
</div>
<section>
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
</section>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
最后,我只需要向每个父类添加一个类,就像
foreach($parents as $key => $parent) {
$parent->setAttribute('class', 'prefix_'.$key);
}
并希望得到输出
<div class="prefix_0">
...
</div>
<section class="prefix_1">
...
</section>
<div class="prefix_2">
...
</div>
它不像我看到的那样工作,因为我们没有数组,而是节点列表
那么如何避免添加相同的父级呢?非常简单的函数可以避免:
function compareParentNode($compare_node,$parents){
foreach($parents as $parent){
if ($parent->isSameNode($compare_node)) return true;
}
return false;
}
使用:
$parents = [];
foreach($dom->getElementsByTagName('p') as $paragraph) {
$parentNode = $paragraph->parentNode;
if (!compareParentNode($parentNode,$parents)){
$parents[] = $paragraph->parentNode;
}
}
更多信息请参见“非常简单的功能”以避免:
function compareParentNode($compare_node,$parents){
foreach($parents as $parent){
if ($parent->isSameNode($compare_node)) return true;
}
return false;
}
使用:
$parents = [];
foreach($dom->getElementsByTagName('p') as $paragraph) {
$parentNode = $paragraph->parentNode;
if (!compareParentNode($parentNode,$parents)){
$parents[] = $paragraph->parentNode;
}
}
查看更多信息您希望与什么进行比较以验证该项不存在?nodeValue?您的目标是在父数组中获得一个div>p和一个section>p吗?您能用预期的示例输出更新您的问题吗。。。还有一个例子,说明父母已经将其与之进行了比较。伏都教为您提供了有效的解决方案。您希望与什么进行比较以验证该项目是否不存在?nodeValue?您的目标是在父数组中获得一个div>p和一个section>p吗?您能用预期的示例输出更新您的问题吗。。。还有一个例子,说明父母已经把它和巫毒做了比较。巫毒有一个有效的解决办法。
$parents = [];
foreach($dom->getElementsByTagName('p') as $paragraph) {
$parentNode = $paragraph->parentNode;
if (!compareParentNode($parentNode,$parents)){
$parents[] = $paragraph->parentNode;
}
}