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++;
}
}
如果有一个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++;
}
}