0

PHP を学習するための Web サイトを構築しており、combine-rss-feeds を自分の Web サイトに表示できる 1 つのフィードにしています。

コードは次のとおりです。

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

これは素晴らしいスクリプトで、完璧に機能しますが、私の Web サイトでかなりのスペースを占有します。MySQL の制限のように、たとえば 5 つの結果のみを表示するように制限するにはどうすればよいですか?

4

1 に答える 1

2

foreach を for(i=0; i<5; i++) ループに変更します。もう 1 つの可能性: foreach の開始時にインクリメントしてテストするカウンター変数を導入します。5 になったらループを抜けます。

于 2012-08-14T16:58:57.490 に答える