Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP、XML:如何删除重复的嵌套对象?_Php_Xml_Object_Nested_Simplexml - Fatal编程技术网

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

PHP、XML:如何删除重复的嵌套对象?,php,xml,object,nested,simplexml,Php,Xml,Object,Nested,Simplexml,如果存在包含以下内容的xml文件,如何删除重复对象?似乎没有一个php simplexml函数可以做到这一点。任何帮助都将不胜感激 <?xml version="1.0"?> <cars> <car> <year>2000</year> <make>cheverolet</make> <model>malibu</model> </car> <car> &l

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

<?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>

2000
切维罗莱特
马利布
2019
切维罗莱特
马利布
2000
切维罗莱特
马利布

使用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++;
    }
}

将其转换为数组,然后删除重复,然后转换为XML?您仍然可以从中删除重复。它将转换为三维数组。请参阅上面的注释