PHP, XML: 如何删除重复的嵌套对象?

PHP, XML: How can duplicate nested objects be deleted?

如果有一个xml文件包含以下内容,如何删除重复的对象?似乎没有 php 简单 xml 函数可以做到这一点。任何帮助将不胜感激。

<?xml version="1.0"?>
<cars>
  <car>
<year>2000</year>
<make>cheverolet</make>
<model>malibu</model>
</car>
  <car>
<year>2019</year>
<make>cheverolet</make>
<model>malibu</model>
</car>
  <car>
<year>2000</year>
<make>cheverolet</make>
<model>malibu</model>
</car>
</cars>

使用 SimpleXML 可以,您可以使用 unset() 删除项目,这里我将已经找到的项目存储在一个数组中,并在删除它或将其添加为新找到的组合之前进行检查。

唯一的麻烦是取消设置您正在修改的列表中的项目,所以在这里我只是保持 $carPos 指向列表中的实际项目,并且只在我找到一个时递增它独一无二的。这使用 xpath() 查找要查看的汽车列表,以便该列表独立于正在修改的列表...

$found = [];
$xml = simplexml_load_string($data);

$carPos = 0;
foreach ( $xml->xpath("//car") as $key => $car )   {
    $carType = (string)$car->year.",".(string)$car->make.",".(string)$car->model;
    if ( isset ( $found[$carType]) )    {
        unset ($xml->car[$carPos]);
    }
    else    {
        $found[$carType] = true;
        $carPos++;
    }
}