Из документации array_unique
Примечание: два элемента считаются равными тогда и только тогда, когда (строка) $ elem1
=== (строка) $ elem2. На словах: когда строковое представление одинаково. Первый элемент будет использован.
В этом случае объекты, которые вы получаете из запроса XPath, преобразуются в строковую форму, например «объект SimpleXML» (не совсем так, но точное представление не имеет значения). Согласно приведенным выше правилам, каждый элемент выглядит одинаково для array_unique
.
К сожалению, нет способа заставить array_unique
вести себя так, как вы хотите, поэтому вам придется подделать его самостоятельно:
$feeds = array(
'myfeed.xml', 'myfeed.xml'
);
// Get all feed entries
$entries = array();
foreach ($feeds as $feed) {
$xml = simplexml_load_file($feed);
$tmp = $xml->xpath('/rss/channel//item');
foreach ($tmp as $item) {
if(!in_array($tmp, $entries)) {
$entries[] = $tmp;
}
}
}
Я не уверен, сработает ли это, поскольку это зависит от возможности сравнивать объекты, а также я не знаю, будут ли идентичные узлы из отдельных документов XML в любом случае сравниваться одинаково. Но попробуйте и дайте мне знать. Я могу сделать что-то еще, если это не поможет.