2011-10-11 98 views
0

考虑有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个新标题。

在此代码
+3

为什么不是你写一个函数,每饲料只是工作,然后迭代你的数据?这就是迭代的目的:与一个一样但是多个。 – hakre

+0

,因为我想从多个获得合并后的数据反馈 – George

+0

要么只是结合了数据以后,或者只是再次遍历数据并显示它。然后在显示器中进行组合。现在,你将太多的逻辑引入你的函数中,并导致错误,因为对你而言,一切看起来都很复杂。保持简单,将任务分开,减少错误的可能性,并为您提供更好的代码。 – hakre

回答

2

要重设$在你的内心我为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; 
} 
+0

仍然没有工作,我得到了一个未定义的非对象错误的属性偏移4 – George

+0

,我应该怎么修复它。如果我知道我不会问 – George

+1

@george即时通讯思想比较遗憾的是等待 –

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]); 
      }