php多维数组迭代问题

时间:2011-10-11 14:28:56

标签: php arrays multidimensional-array

考虑使用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获得一个新标题。

2 个答案:

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