2012-07-17 2 views
0

Я пытаюсь проанализировать последние 3 статьи новостей в ленте RSS. После этого он должен создать «предварительный просмотр» описания, а затем отобразить заголовок и предварительный просмотр. Я получил его для отображения первой статьи 3 раза ...Проблема с доступом к информации в многомерном массиве в PHP

<?php 
$doc = new DOMDocument(); 
$doc->load('http://info.arkmediainc.com/CMS/UI/Modules/BizBlogger/rss.aspx?tabid=575593&moduleid=1167800&maxcount=25&t=16c4c7582db87da06664437e98a74210'); 
$arrFeeds = array(); 
foreach ($doc->getElementsByTagName('item') as $node) { 
    $itemRSS = array ( 
     'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 
     'link' => $node->getElementsByTagName('link')->item(0)->nodeValue, 
     'description' => $node->getElementsByTagName('description')->item(0)->nodeValue, 
     'pubDate' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue 
    ); 
    array_push($arrFeeds, $itemRSS); 
} 
$itemRSS = array_slice($itemRSS, 0, 3); // This cuts it down to 3 articles. 


for ($i = 0; $i < 3; $i++) 
{ 
    $title = $itemRSS['title']; 
    $description = substr($itemRSS['description'],0,100); 
    echo("<h2>".$title."</h2>"); 
    echo("<br />".$description."<br />"); 
} 
?> 

Я также получил его «работа» (показать первые 3), используя петлю Еогеасп ...

/* 
foreach($itemRSS as $ira) 
{ 
    $title = $itemRSS['title']; 
    $description = substr($itemRSS['description'],0,100); 
    echo("<h2>".$title."</h2>"); 
    echo("<br />".$description."<br />"); 
} 
*/ 

Это прокомментировал, потому что это имеет меньшее значение для меня.

Пожалуйста, помогите! Благодаря!

+0

Вам нужно обратиться к индексам в $ itemRSS. Поэтому попробуйте что-то вроде $ title = $ itemRSS [$ i] ['title']; – tubaguy50035

+0

Не работает ... –

ответ

0

Вы переместили элементы rss в $arrFeeds, и теперь вы можете получить к ним доступ по индексу, например. $arrFeeds[0] будет первым rss-элементом.

for ($i = 0; $i < 3; $i++) 
{ 
    $title = $arrFeeds[$i]['title']; 
    $description = substr($arrFeeds[$i]['description'],0,100); 
    echo("<h2>".$title."</h2>"); 
    echo("<br />".$description."<br />"); 
} 

Но следующий лучше: с foreach:

$theFirstThreeArticles = array_slice($arrFeeds, 0, 3); // This cuts it down to 3 articles. 

foreach($theFirstThreeArticles as $ira) 
{ 
    $title = $ira['title']; 
    $description = substr($ira['description'],0,100); 
    echo("<h2>".$title."</h2>"); 
    echo("<br />".$description."<br />"); 
} 
+0

Это разбивает всю страницу ... У меня есть «foreach» на месте прямо сейчас, и вы можете увидеть результаты здесь: http://www.arkmediainc.com/ark20test/ark20test /index.php Код должен отображаться под «Наши блоги», но вместо этого он помещает наш нижний колонтитул в вертикальное положение и ... –

+0

Я вижу, что он работает – Besnik

0

При использовании Еогеасп, есть есть два (в вашем случае, но может быть 3) возможные «параметры» что он принимает. Массив для перемещения и переменная для хранения каждого элемента. Этот пример:

$numbers = array('one', 'two'); 
foreach($numbers as $number) { 
    echo "\nNew Iteration\n"; 
    var_dump($numbers); 
    var_dump($number); 
} 

Will output:

New Iteration 
array(2) { 
    [0] => string(3) "one" 
    [1] => string(3) "two" 
} 
string(3) "one" 

New Iteration 
array(2) { 
    [0] => string(3) "one" 
    [1] => string(3) "two" 
} 
string(3) "two" 

Итератор никогда не изменяет массив. Он просто устанавливает $number как значение каждого элемента в массиве, пока не будет больше элементов. Тот же принцип применяется к петле for. Код ниже will produce the same as above.

$numbers = array('one', 'two'); 
for($i = 0; $i < count($numbers); $i++) { 
    echo "\nNew Iteration\n"; 
    var_dump($numbers); 
    var_dump($numbers[$i]); 
} 

То же самое относится к использованию многомерных массивов. Если вы выберете for или foreach, вам нужно получить доступ к каждому элементу массива. Так что ваш код будет выглядеть примерно так:

foreach($rssItems as $rssItem) 
{ 
    $title = $rssItem['title']; 
    $description = substr($rssItem['description'],0,100); 
    echo("<h2>".$title."</h2>"); 
    echo("<br />".$description."<br />"); 
} 

Я решил использовать Еогеасп, потому что я считаю, что это намного проще, чтобы PHP обрабатывать итерацию. Кроме того, строка foreach правильно читается на английском языке. Для каждого элемента в $rssItems его псевдоним $rssItem. Обратите внимание на разницу между множественным числом и единственным. foreach запускает свой блок для каждого элемента в $rssItems, и для каждой итерации переменная $rssItem будет содержать текущее значение в $rssItems, что цикл включен.

Хотите больше повода для использования foreach? Если вам нужно также работать с ключом, foreach даст вам как ключ, так и значение каждого элемента хэша (массива).

$words = array('hola' => 'hello', 'adios' => 'goodbye', 'gracias' => 'thank you'); 
foreach($words as $spanishWord => $englishTranslation) { 
    echo $spanishWord . " in English is " . $englishTranslation . "\n"; 
} 

Foreach также позволяет вам SPL писать классы, которые расширяют или реализуют итератор. Классы, содержащие коллекции, могут функционировать как класс, но могут быть повторены.Например:

class PhotoAlbum implements IteratorAggregate { 
    private $pictures = array(); 

    public function __construct($pictures) { 
     $this->pictures = $pictures; 
    } 

    public function addPicture($picture) { 
     $this->pictures[] = $picture; 
    } 

    public function share($friend) { 
     // etc.. 
    } 

    public function getIterator() { 
     return new ArrayIterator($this->pictures); 
    } 
} 

$album = new PhotoAlbum($picturesArrayFromDB); 
foreach($album as $picture) { 
    echo $picture; 
} 
Смежные вопросы