【问题标题】:Shuffle the order in "foreach ($this->items as $item)"在“foreach ($this->items as $item)”中打乱顺序
【发布时间】:2012-08-05 15:25:10
【问题描述】:

我一直在尝试随机化我网站的 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),但提要停止工作。我还尝试使用相同的项目创建一个新数组并对其进行随机播放,但结果是相同的。谁能帮我?好久没写代码了,重要的东西都忘了……

【问题讨论】:

    标签: php rss shuffle


    【解决方案1】:

    在输出结果之前,您可以做以下两件事之一:

    shuffle($this->items);
    

    这会破坏项目的原始顺序。如果该顺序很重要,请尝试以下操作:

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

    【讨论】:

    • 我已经尝试过这种方法。求你的帮助。第二个答案效果更好。
    【解决方案2】:

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

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

    希望这有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      相关资源
      最近更新 更多