考虑使用4种不同的RSS新闻源URL
$urls[0]['news'] = "url1";
$urls[1]['news'] = "url2";
$urls[2]['news'] = "url3";
$urls[3]['news'] = "url4";
以下功能应该从每个网址
获得4个新闻标题function getRssFeeds($urls,$type){
//Prepare XML objects
$xmls[$type] = array();
//Prepare item objects
$items[$type] = array();
//Prepare news titles/links arrays
$article_titles[$type] = array();
$encoded_titles[$type] = array();
$article_links[$type] = array();
//Fill XML objects
for($i=0; $i<4; $i++){
$xmls[$i][$type] = simplexml_load_file($urls[$i][$type]);
//Prepare news items
$items[$i][$type] = $xmls[$i][$type]->channel->item;
for($i=0; $i<4; $i++){
$article_titles[$i][$type] = $items[$i][$type]->title;
$encoded_titles[$i][$type] = iconv("UTF-8","windows-1251",$article_titles[$i][$type]);
}
//$article_links[$type][$i] = $items[$type][$i]->link;
}
return $encoded_titles;
}
使用以下内容获取值后:
type='';
function printRssFeed($urls,$type){
$titles = getRssFeeds($urls,$type);
foreach($titles as $title)
{
echo $title[$type]."<hr/>";
}
}
我得到未定义的偏移误差。如果我删除了getRssFeeds()
函数的内部for循环,我只从每个URL获得一个新标题。
答案 0 :(得分:2)
在此代码中,您将在内部for循环中将$ i重置为0.
for($i=0; $i<4; $i++){
$xmls[$i][$type] = simplexml_load_file($urls[$i][$type]);
//Prepare news items
$items[$i][$type] = $xmls[$i][$type]->channel->item;
for($i=0; $i<4; $i++){
$article_titles[$i][$type] = $items[$i][$type]->title;
$encoded_titles[$i][$type] = iconv("UTF-8","windows-1251",$article_titles[$i][$type]);
}
//$article_links[$type][$i] = $items[$type][$i]->link;
}
尝试将内部for循环变量更改为其他变量。此外,当您定义数组时,您似乎没有遵循相同的结构。
$xmls[$i][$type]
不是$xmls[$type] = array();
的原始实例化
这适用于所有其他阵列。
所以我认为您的数组结构已关闭,因为您添加了顶级$type
,然后在迭代时使用$i
作为顶级键。
尝试在开头
中删除数组的实例化function getRssFeeds($urls,$type){
//Fill XML objects
for($i=0; $i<4; $i++){
$xmls[$i][$type] = simplexml_load_file($urls[$i][$type]);
//Prepare news items
$items[$i][$type] = $xmls[$i][$type]->channel->item;
for($i=0; $i<4; $i++){
$article_titles[$i][$type] = $items[$i][$type]->title;
$encoded_titles[$i][$type] = iconv("UTF-8","windows-1251",$article_titles[$i][$type]);
}
//$article_links[$type][$i] = $items[$type][$i]->link;
}
return $encoded_titles;
}
答案 1 :(得分:0)
在你的内部循环中尝试这个
$j = 0;
for($j=0; $j<4; $j++){
$article_titles[$j][$type] = $items[$i][$type]->title;
$encoded_titles[$j][$type] = iconv("UTF-8","windows-1251",$article_titles[$j][$type]);
}