我一直试图随机化我网站的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停止工作。我也尝试使用相同的项目创建一个新的数组并将其洗牌,但结果是一样的。谁能帮我?自从我写了一些我忘记了重要内容的代码以来,已经很久了......
答案 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_keys
Docs和shuffle
Docs功能。
要进一步改进,请创建一个按以下方式输出数组的函数:
...
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);
}
希望这有用。