2013-12-17 58 views
0

有沒有辦法可以按照pubDate降序排列該RSSfeed? 我嘗試了排序和其他一些東西,但我無法讓它工作。我想顯示5個最後修改的頁面。通過pubdate排序rss.xml

<?php 
$rss = new DOMDocument(); 
$rss->load('../../rssfeed.xml'); 
$feed = array(); 

foreach ($rss->getElementsByTagName('item') as $node) { 
    $item = array(
     'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 
     'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 
     'link' => $node->getElementsByTagName('link')->item(0)->nodeValue, 
     'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue, 
    ); 
    array_push($feed, $item); 
} 
$limit = 5; 

for ($x = 0; $x < $limit; $x++) { 
    $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']); 
    $link = $feed[$x]['link']; 
    $description = $feed[$x]['desc']; 
    $date = date('l F d, Y', strtotime($feed[$x]['date'])); 
    echo '<p><strong><a href="' . $link . '" title="' . $title . '">' . $title . '</a></strong><br />'; 
    echo '<small><em>Posted on ' . $date . '</em></small></p>'; 
    echo '<p>' . $description . '</p>'; 
} 
?> 
+1

我懷疑你在編寫這個問題時有很多潛在的重複問題,都有一些'usort()'的變體作爲答案?那麼,猜猜看是什麼? 'usort' _is_你的朋友。如果您在使用時遇到問題,請儘量在問題中分享您的最大努力,我們會看看。 – Wrikken

回答

2

您可以在Feed數組上使用usort()。在$item['data']使用strtotime()爲項目的比較值,應該讓你設置:

function compareItems($a,$b) { 
    $a=strtotime($a['date']); 
    $b=strtotime($b['date']); 

    if($a==$b) 
     return 0; 
    elseif($a < $b) 
     return -1; 
    else 
     return 1; 
} 

現在一切都剩下要做的就是運行usort($feed,'compareItems');

+0

我嘗試使用你說的話,但我不明白我必須如何將該代碼放在一起。我怎樣才能使用usort項目[日期]。對不起,但我是相當新的XML解析 – Johan

+0

這與XML排序沒有多大關係。 – DaSourcerer

+0

我已更新我的解決方案。 – DaSourcerer

0

下面是用在array_multisort時代RSS feed中的排序一些代碼。注意正在進行的$ item數組的更改。

<?php 
$rss = new DOMDocument(); 
$rss->load('../../rssfeed.xml'); 
$feed = array(); 
foreach ($rss->getElementsByTagName('item') as $node) { 
    $item = array (
      'title' => htmlspecialchars_decode($node->getElementsByTagName('title')->item(0)->nodeValue), 
      'description' => $node->getElementsByTagName('description')->item(0)->nodeValue, 
      'link' => $node->getElementsByTagName('link')->item(0)->nodeValue, 
      'time' => strtotime($node->getElementsByTagName('pubDate')->item(0)->nodeValue), 
      ); 
    $x++; 
    $times[$x] = $item['time']; 
    $items[$x] = $item; 
} 

array_multisort($times, SORT_DESC, $items); 
$items = array_slice($items, 5); 

foreach($items as $item) { 
    $date = date('l F d, Y', strtotime($item['date'])); 
    echo '<p><strong><a href="'.$item['link'].'" title="'.$item['title'].'">'.htmlspecialchars($item['title']).'</a></strong><br />'; 
    echo '<small><em>Posted on '.$date.'</em></small></p>'; 
    echo '<p>'.$item['description'].'</p>'; 
}