Php 如何检查dom节点列表是否已经有相同的节点

Php 如何检查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

我需要通过PHP
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;
   }
}