2012-08-14 92 views
0

我正在建立一个网站来学习PHP,并且正在制作一个可以在我的网站上展示的feed-rss-feeds。如何限制饲料?

下面的代码:

<?php 

    class Feed_Amalgamator 
    { 
     public $urls = array(); 
     public $data = array(); 

     public function addFeeds(array $feeds) 
     { 
      $this->urls = array_merge($this->urls, array_values($feeds)); 
     } 

     public function grabRss() 
     { 
      foreach ($this->urls as $feed) 
      { 
       $data = @new SimpleXMLElement($feed, 0, true); 
       if (!$data) 
        throw new Exception('Could not load: ' . $feed); 
       foreach ($data->channel->item as $item) 
       { 
        $this->data[] = $item; 
       } 
      } 
     } 

     public function amalgamate() 
     { 
      shuffle($this->data); 
      $temp = array(); 
      foreach ($this->data as $item) 
      { 
       if (!in_array($item->link, $this->links($temp))) 
       { 
        $temp[] = $item; 
       } 
      } 
      $this->data = $temp; 
      shuffle($this->data); 
     } 

     private function links(array $items) 
     { 
      $links = array(); 
      foreach ($items as $item) 
      { 
       $links[] = $item->link; 
      } 
      return $links; 
     } 
    } 

    /********* Example *********/ 

    $urls = array('http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/football/teams/m/man_city/rss.xml', 'http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/football/teams/l/liverpool/rss.xml'); 

    try 
    { 
     $feeds = new Feed_Amalgamator; 
     $feeds->addFeeds($urls); 
     $feeds->grabRss(); 
     $feeds->amalgamate(); 
    } 
    catch (exception $e) 
    { 
     die($e->getMessage()); 
    } 

    foreach ($feeds->data as $item) : 
    extract((array) $item); 
    ?> 
    <a href="<?php echo $link; ?>"><?php echo $title; ?></a> 
    <p><?php echo $description; ?></p> 
    <p><em><?php echo $pubDate; ?></em></p> 
    <?php endforeach; ?> 

这是一个伟大的剧本,完美的作品,但它占用了相当多的空间在我的网站。我怎么能限制它只显示5个结果,有点像MySQL限制?

+0

您想要总共五个结果,或者每个URL有五个结果? – j08691 2012-08-14 16:52:19

+0

@ j08691,5个总计结果 – Muhambi 2012-08-14 16:52:45

+0

或者每个网址的结果比2更容易。这可能吗? – Muhambi 2012-08-14 16:58:32

回答

2

将您的foreach更改为for(i = 0; i < 5; i ++)循环。另一种可能性:引入一个计数器变量,您可以在foreach开始时进行增量和测试。当它击中5时跳出循环。

+0

我用了第二个。工作完美,谢谢! – Muhambi 2012-08-14 17:09:58