0

私は自分のウェブサイトのRSSフィードがアイテムを出力する順序をランダム化しようとしていますが、まだ運がありません。これは、実際のxmlを作成するコードの一部です。

class RSSFeed {    
        private $items;

        public function __construct() {
            $this->items = array();   }

        public function addItem($item) {
            $this->items[] = $item;}

        public function dumpXML() {
                echo '<?xml version="1.0" encoding="UTF-8"?>', PHP_EOL;
                echo '<rss version="2.0">', PHP_EOL;
                echo '<channel>', PHP_EOL;
                foreach ($this->items as $item) {
                    echo '<item>', PHP_EOL;
                    echo '<title><![CDATA[', $item['title'], ']]></title>', PHP_EOL;
                    echo '<link>', $item['link'], '</link>', PHP_EOL;
                    echo '<guid>', $item['link'], '</guid>', PHP_EOL;
                    echo $item['description'], ']]>';
                    echo '</description>', PHP_EOL;
                    echo '</item>', PHP_EOL;
                }
                echo '</channel>', PHP_EOL;
                echo '</rss>', PHP_EOL;

shuffle($ items)を使用してみましたが、フィードが機能しなくなりました。同じアイテムで新しい配列を作成してシャッフルしようとしましたが、結果は同じでした。誰が私を助けられるか?重要なことを忘れてしまったコードを書いてから久しぶりです...

4

2 に答える 2

3

結果を出力する前に、次の 2 つのいずれかを行うことができます。

shuffle($this->items);

これにより、アイテムの元の順序が破棄されます。その順序が重要な場合は、これを試してください。

$tmp = $this->items;
shuffle($tmp);
foreach($tmp...
于 2012-08-05T15:29:10.220 に答える
0

配列自体をシャッフルする必要はなく、アイテムの順序のみをシャッフルする必要があります。

$keys = array_keys($this->items);
shuffle($keys);
foreach ($keys as $key) {
    $item = $this->items[$key];
    ... 
}

array_keysDocsおよびshuffleDocs関数を参照してください。

さらに改善するには、配列をそのまま出力する関数を作成します。

...
private function echoRSS(array $items) {
            echo '<?xml version="1.0" encoding="UTF-8"?>', PHP_EOL;
            echo '<rss version="2.0">', PHP_EOL;
            echo '<channel>', PHP_EOL;
            foreach ($items as $item) {
                ...
            }
            ...

次に、その関数を呼び出すなど、必要なことを簡単に行うことができます。

public function dumpXML() {
    $items = $this->items;
    shuffle($items);
    $this->echoRSS($items);
}

これが役に立てば幸いです。

于 2012-08-05T15:32:49.883 に答える