在“foreach($ this-> items as $ item)”中随机播放订单

时间:2012-08-05 15:25:11

标签: php rss shuffle

我一直试图随机化我网站的rss Feed输出项目的顺序,但还没有运气。这是创建实际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),但Feed停止工作。我也尝试使用相同的项目创建一个新的数组并将其洗牌,但结果是一样的。谁能帮我?自从我写了一些我忘记了重要内容的代码以来,已经很久了......

2 个答案:

答案 0 :(得分:3)

在输出结果之前,您可以执行以下两项操作之一:

shuffle($this->items);

这会破坏物品的原始顺序。如果该订单有一定的重要性,请尝试:

$tmp = $this->items;
shuffle($tmp);
foreach($tmp...

答案 1 :(得分:0)

您不需要对数组本身进行随机播放,只需要对项目的顺序进行洗牌:

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

请参阅array_keysDocsshuffleDocs功能。

要进一步改进,请创建一个按以下方式输出数组的函数:

...
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);
}

希望这有用。