2012-08-05 29 views
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),但Feed停止工作。我也嘗試用同樣的東西創建一個新的數組,然後洗牌,但結果是一樣的。誰能幫我?這是這麼久以來我已經寫了一些代碼,我已經忘記了重要的東西......

回答

3

輸出結果之前,你可以做兩件事情之一:

shuffle($this->items); 

這破壞了原來的順序的項目。如果這個順序有一定的重要性,試試這個:

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

我已經試過這種方法。 ty爲您提供幫助。第二個答案的效果好一點。 – user1577503 2012-08-05 18:21:01

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

希望這是有幫助的。

+0

感謝您的幫助。它完美地工作。 – user1577503 2012-08-05 18:21:34