【问题标题】:PHP, XML: How can duplicate nested objects be deleted?PHP,XML:如何删除重复的嵌套对象?
【发布时间】:2019-06-28 15:24:01
【问题描述】:

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

【问题讨论】:

  • 将其转换为数组,然后删除重复项,然后转换为 XML?
  • 你仍然可以从 .. 中删除欺骗。
  • 转换为3维数组。
  • 见上面的评论

标签: php xml object nested simplexml


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-06-02
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多