如何正确使用array_unique只回显一次相同的帖子



我试图显示一些RSS提要的帖子,我提出了一个问题/问题,我有,当我有两个相同的提要我试图显示不是所有的帖子,但唯一的。我使用的是这个,它显示了我所有的帖子两次(这是逻辑的)

 <?php
$feeds = array(
'feed.xml', 'feed.xml'
);

// Get all feed entries
$entries = array();
foreach ($feeds as $feed) {
    $xml = simplexml_load_file($feed);
    $entries = array_merge($entries, $xml->xpath('/rss/channel//item'));
}

// Sort feed entries by pubDate (ascending)
usort($entries, 'mysort');

function mysort($x, $y) {
    return strtotime($y->pubDate) - strtotime($x->pubDate);
}

foreach ($entries as $entry) {
echo $entry->title; 
echo "<br>";
} 
?>

但是当我把这行改成

$entries = array_unique(array_merge($entries, $xml->xpath('/rss/channel//item')));

我只看到一个帖子。

我怎样才能正确地只显示一次帖子?谢谢你。

更新:

function mysort($x, $y) {
    return strtotime($y->pubDate) - strtotime($x->pubDate);
}
$feeds = array( 'http://feeds.bbci.co.uk/news/world/rss.xml',
                'http://feeds.bbci.co.uk/news/world/rss.xml'
              );
// Get all feed entries
$entries = array();
foreach ($feeds as $feed) {
    $xml = simplexml_load_file($feed);
    $entries = array_merge($entries, $xml->xpath('/rss/channel//item'));
}
$uniqueEntries = array();
foreach ($entries as $entry) {
    $uniqueEntries[(string)$entry->title] = $entry;
}
// Sort feed entries by pubDate (ascending)
usort($entries, 'mysort');
foreach ($uniqueEntries as $entry) {
    echo $entry->title; 
    echo "<br>";
} 

摘自array_unique的文档

注意:两个元素相等当且仅当(string) $elem1=== (string) $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文档的相同节点会比较相同的。试试吧,然后告诉我。如果这个不行的话,我可以做其他的

相关内容

  • 没有找到相关文章

最新更新