由pubdate排序rss.xml

时间:2013-12-17 22:52:44

标签: php xml

我有没有办法按pubDate降序排列这个RSSfeed? 我尝试了排序和其他一些东西,但我无法让它工作。我想显示最后修改的5页。

<?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>';
}
?>

3 个答案:

答案 0 :(得分:2)

您可以在Feed数组中使用usort()。在strtotime()上使用$item['data']作为项目的比较值应该设置为:

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');

答案 1 :(得分:0)

以下是一些使用array_multisort对RSS提要中的时间进行排序的代码。注意正在进行的$ 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>';
}

答案 2 :(得分:0)

使用Anonymous functions和宇宙飞船operator(需要PHP7)的DaSourcerer答案的更紧凑版本:

button.addEventListener('click', function(event) => {
     event.preventDefault();
     // your function here
});

如果希望它们按照最新的顺序排序,只需在函数内交换$ a和$ b即可:

usort($feed, function($a, $b) {
    return strtotime($a['date']) <=> strtotime($b['date']);
});