PHP, XML: как можно удалить дубликаты вложенных объектов? - PullRequest
0 голосов
/ 28 июня 2019

Если существует 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>

1 Ответ

1 голос
/ 28 июня 2019

Использование 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++;
    }
}
...