0

我有一个 php 文件设置来提取一个XML 数据提要,我想做的是最多加载 4 个提要,如果可能的话,让它也选择一个随机项目。然后将其解析为 jQuery News Ticker。

我目前的PHP如下...

<?php
$feed = new DOMDocument();
$feed->load('/feed');
$json = array();

$json['title'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$json['description'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
$json['link'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('link')->item(0)->firstChild->nodeValue;

$items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');

$json['item'] = array();
$i = 0;


foreach($items as $item) {

   $title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
   $description = $item->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
   $pubDate = $item->getElementsByTagName('pubDate')->item(0)->firstChild->nodeValue;
   $guid = $item->getElementsByTagName('guid')->item(0)->firstChild->nodeValue;

   $json['item'][$i++]['title'] = $title;
   $json['item'][$i++]['description'] = $description;
   $json['item'][$i++]['pubdate'] = $pubDate;
   $json['item'][$i++]['guid'] = $guid; 

   echo '<li class="news-item"><a href="#">'.$title.'</a></li>';

}


//echo json_encode($json);


?>

如何修改它以将多个提要加载到文件中?

提前致谢

4

2 回答 2

1

执行此操作的最简单方法是围绕您拥有的代码包装另一个循环。这不是最干净的方式,但可能就足够了。

一般来说,IMO,首先学习语言的基础知识总是有益的。例如PHP 手册foreach

这大致是循环需要的样子:

$my_feeds = array("http://.....", "http://.....", "http://.....");

foreach ($my_feeds as $my_feed)
 {
  // This is where your code starts
  $feed = new DOMDocument();
  $feed->load($my_feed); <--------------- notice the variable
  $json = array();

 ... and the rest of the code

 }

这将遍历 中的所有 URL $my_feeds,打开 RSS 源,从中获取所有项目,然后输出它们。

于 2012-06-13T15:03:34.217 回答
0

如果我正确地阅读了您的问题,您可能想要做的是将您的代码转换为一个函数,然后您将在每个 url 的 foreach 循环中运行该函数(您可以将其存储在数组或其他数据结构中)。

编辑:如果您对函数不太了解,本教程部分可能会对您有所帮助。http://devzone.zend.com/9/php-101-part-6-functionally-yours/

于 2012-06-13T14:26:39.977 回答