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

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

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

希望这会有所帮助。

于 2012-08-05T15:32:49.883 回答