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