PHP、XML:如何删除重复的嵌套对象?
如果存在包含以下内容的xml文件,如何删除重复对象?似乎没有一个php simplexml函数可以做到这一点。任何帮助都将不胜感激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 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?您仍然可以从中删除重复。它将转换为三维数组。请参阅上面的注释