PHP多维数组迭代问题
问题描述:
考虑有4个不同的RSS新闻源的URLPHP多维数组迭代问题
$urls[0]['news'] = "url1";
$urls[1]['news'] = "url2";
$urls[2]['news'] = "url3";
$urls[3]['news'] = "url4";
下面的函数应该从每个URL的
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;
}
得到4个新闻标题中使用下列拿到后值:
type='';
function printRssFeed($urls,$type){
$titles = getRssFeeds($urls,$type);
foreach($titles as $title)
{
echo $title[$type]."<hr/>";
}
}
我得到未定义的偏移量错误。如果我删除getRssFeeds()
函数的内部循环,则每个URL只能获得1个新标题。
答
要重设$在你的内心我为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;
}
尝试将您的内循环变量更改为不同的变量。同样,当你定义你的数组时,似乎你没有遵循相同的结构。
$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;
}
答
试试这个在你内心的循环
$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]);
}
为什么不是你写一个函数,每饲料只是工作,然后迭代你的数据?这就是迭代的目的:与一个一样但是多个。 – hakre
,因为我想从多个获得合并后的数据反馈 – George
要么只是结合了数据以后,或者只是再次遍历数据并显示它。然后在显示器中进行组合。现在,你将太多的逻辑引入你的函数中,并导致错误,因为对你而言,一切看起来都很复杂。保持简单,将任务分开,减少错误的可能性,并为您提供更好的代码。 – hakre