我正在尝试解析RSS Feed中最新的3篇新闻文章。之后,它应该创建描述的“预览”,然后显示标题和预览。我得到它显示第一篇文章3次...
<?php
$doc = new DOMDocument();
$doc->load('http://info.arkmediainc.com/CMS/UI/Modules/BizBlogger/rss.aspx?tabid=575593&moduleid=1167800&maxcount=25&t=16c4c7582db87da06664437e98a74210');
$arrFeeds = array();
foreach ($doc->getElementsByTagName('item') as $node) {
$itemRSS = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
'description' => $node->getElementsByTagName('description')->item(0)->nodeValue,
'pubDate' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue
);
array_push($arrFeeds, $itemRSS);
}
$itemRSS = array_slice($itemRSS, 0, 3); // This cuts it down to 3 articles.
for ($i = 0; $i < 3; $i++)
{
$title = $itemRSS['title'];
$description = substr($itemRSS['description'],0,100);
echo("<h2>".$title."</h2>");
echo("<br />".$description."<br />");
}
?>
我还通过使用foreach循环来“工作”(显示前3个)...
/*
foreach($itemRSS as $ira)
{
$title = $itemRSS['title'];
$description = substr($itemRSS['description'],0,100);
echo("<h2>".$title."</h2>");
echo("<br />".$description."<br />");
}
*/
它被评论出来,因为它对我来说没什么意义。
请帮忙!谢谢!
答案 0 :(得分:0)
您已将RSS项目推送到$arrFeeds
,现在您可以通过索引访问这些项目,例如$arrFeeds[0]
将成为第一个rss项目。
for ($i = 0; $i < 3; $i++)
{
$title = $arrFeeds[$i]['title'];
$description = substr($arrFeeds[$i]['description'],0,100);
echo("<h2>".$title."</h2>");
echo("<br />".$description."<br />");
}
但以下情况更好:与foreach
:
$theFirstThreeArticles = array_slice($arrFeeds, 0, 3); // This cuts it down to 3 articles.
foreach($theFirstThreeArticles as $ira)
{
$title = $ira['title'];
$description = substr($ira['description'],0,100);
echo("<h2>".$title."</h2>");
echo("<br />".$description."<br />");
}
答案 1 :(得分:0)
当你使用foreach时,它有两个(在你的情况下,但可能有3个)它接受的可能的“参数”。要遍历的数组和存储每个元素的变量。这个例子:
$numbers = array('one', 'two');
foreach($numbers as $number) {
echo "\nNew Iteration\n";
var_dump($numbers);
var_dump($number);
}
New Iteration
array(2) {
[0] => string(3) "one"
[1] => string(3) "two"
}
string(3) "one"
New Iteration
array(2) {
[0] => string(3) "one"
[1] => string(3) "two"
}
string(3) "two"
迭代器永远不会修改数组。它只是将$number
设置为数组中每个元素的值,直到没有更多元素为止。同样的原则适用于for
循环。以下代码will produce the same as above。
$numbers = array('one', 'two');
for($i = 0; $i < count($numbers); $i++) {
echo "\nNew Iteration\n";
var_dump($numbers);
var_dump($numbers[$i]);
}
使用多维数组时同样适用。无论您选择for
还是foreach
,都必须访问数组中的每个元素。所以你的代码看起来像这样:
foreach($rssItems as $rssItem)
{
$title = $rssItem['title'];
$description = substr($rssItem['description'],0,100);
echo("<h2>".$title."</h2>");
echo("<br />".$description."<br />");
}
我选择使用foreach因为我发现让PHP处理迭代要容易得多。另外,foreach
行可以用英语正确读取。对于$rssItems
中的每个项目,将其别名为$rssItem
。注意复数和单数之间的区别。 foreach
为$rssItems
中的每个项目运行其块,并且对于每次迭代,变量$rssItem
将包含循环所在的$rssItems
中的当前值。
想要更多理由使用foreach
?如果您还需要使用密钥,foreach将为您提供散列(数组)的每个元素的键和值。
$words = array('hola' => 'hello', 'adios' => 'goodbye', 'gracias' => 'thank you');
foreach($words as $spanishWord => $englishTranslation) {
echo $spanishWord . " in English is " . $englishTranslation . "\n";
}
Foreach还允许SPL编写扩展或实现迭代器的类。包含集合的类可以作为类运行,但可以迭代。例如:
class PhotoAlbum implements IteratorAggregate {
private $pictures = array();
public function __construct($pictures) {
$this->pictures = $pictures;
}
public function addPicture($picture) {
$this->pictures[] = $picture;
}
public function share($friend) {
// etc..
}
public function getIterator() {
return new ArrayIterator($this->pictures);
}
}
$album = new PhotoAlbum($picturesArrayFromDB);
foreach($album as $picture) {
echo $picture;
}