проблема итерации многомерного массива php - PullRequest
0 голосов
/ 11 октября 2011

Рассмотрите возможность использования 4 различных RSS-каналов новостей. URL-адреса

$urls[0]['news'] = "url1";
$urls[1]['news'] = "url2";
$urls[2]['news'] = "url3";
$urls[3]['news'] = "url4";

Следующая функция должна получать 4 заголовка новостей от каждого из 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;
    }

После использования следующих значений для получения значений:

 type='';
    function printRssFeed($urls,$type){
            $titles = getRssFeeds($urls,$type);
            foreach($titles as $title)
            {
                echo $title[$type]."<hr/>";
            }
        }

Я получаю неопределенную ошибку смещения.Если я удаляю внутренний цикл for функции getRssFeeds(), я получаю только 1 новый заголовок с каждого URL.

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

в этом коде вы сбрасываете $ i в 0 во внутреннем цикле for.

 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;
}
0 голосов
/ 12 октября 2011

попробуйте это в вашем внутреннем цикле

$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]);  
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...