希望使用PHP按周过滤XML / RSS

时间:2013-09-06 15:36:03

标签: php xml

首先,我想说我是PHP的新手。我有一个xml文件:http://www.anewmandesigns.com/RSSseptember2013.xml

在Feed中,我试图在我的网站上使用PHP显示9月份(第4天,第11天,第18天和第25天)的星期三的日期(实际条目)。这是我的代码......我该如何修改?

<?php

    $rss = new DOMDocument();
    $rss->load('http://www.anewmandesigns.com/oakshade/calendar/rss/RSSseptember2013.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'])); 
        $year = substr($timestamp, 0, 4);
        $month = date(' M ', strtotime($feed[$x]['date']));
        $day = date(' d ', strtotime($feed[$x]['date']));
        echo '<p>'.$month.'<span> '.$day.'</span></p>';
        echo '<p><a href="'.$link.'" title="'.$title.'">'.$description.'</a></p>';
    }
?>

2 个答案:

答案 0 :(得分:0)

在你的代码的这一部分......

if(date('mw', strtotime($item['date'])) == '093'){
    array_push($feed, $item);
}

编辑:我已将代码更新为仅显示9月

答案 1 :(得分:0)

您可以使用以下条件语句来检查它是否是星期三:

if ( date('l', strtotime($feed[$x]['date']) ) == 'Wednesday') { 
    # code ...
}

检查是否是九月:

if ( date('F', strtotime($feed[$x]['date']) ) == 'September') { 
    # code ...
}

完整代码:

<?php

    $rss = new DOMDocument();
    $rss->load('http://www.anewmandesigns.com/oakshade/calendar/rss/RSSseptember2013.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,
        );

        //echo date('l', strtotime($item['date']))."\n";    
        array_push($feed, $item);
    }

    $limit = 5;

    for($x=0;$x<$limit;$x++) 
    {
        if ( date('l', strtotime($feed[$x]['date']) ) == 'Wednesday')
        {  //  if it is wednesday, proceed

            $title = str_replace(' & ', ' &amp; ', $feed[$x]['title']);
            $link = $feed[$x]['link'];
            $description = $feed[$x]['desc'];    

            $year = date('Y', strtotime($feed[$x]['date']));
            $month = date('M', strtotime($feed[$x]['date']));
            $day = date('d', strtotime($feed[$x]['date']));

            echo '<p>'.$month.'<span> '.$day.'</span></p>';
            echo '<p><a href="'.$link.'" title="'.$title.'">'.$description.'</a></p>';    
        }
    }

?>

注意:

  • 请注意,您没有在任何地方定义$timestamp变量,我已将其更改为直接从pubDate字段获取年份。

  • 在您发布的XML文件中,周三没有发布任何项目,因此上述代码不会输出任何内容,但如果您将其更改为其他工作日,则应该可以正常工作。

  • 当前XML文件的日期都是9月份,所以我避免了代码中的条件检查,但是如果你想检查月份,也可以添加它。

希望这有帮助!