Array Duplicate Item Filtering by Element Value
If the sole purpose was to have a resultant array of objects that did not have a duplicated id then I would be tempted with the below:

// Indexes keyed by item id
$indexes = array();

// Cast to array of objects
$items = current((array)$items);

foreach ($items as $index =&gt; $item) {
    $id = ((array)$item)['id'];

    if (isset($indexes[$id])) {
        // Unset this item
        unset($items[$index]);
        // Unset the original instance
        unset($items[$indexes[$id]]);
    } else {
        $indexes[$id] = $index;
    }
}

// List names of items that doesn't have an id that is duplicated
foreach ($items as $item) {
    // Still have original SimpleXml object to work with
    echo $item-&gt;name . "\n";
}