Траверсированное дерево DOM с циклом foreach

Нужна помощь в обходе дерева DOM с помощью простого HTML DOM Parser. Если кто-то может потратить секунду, чтобы посмотреть, как это работает, знающие PHP-кодеры должны быстро это выяснить, если я это выясню. Где я застрял, так это получение статей от div на российском баскетбольном сайте моего друга. Например, вот как выглядит div блога:

<div id='columnsList'><div class='item'>
  <div class='title'><a href='/ru/columns/1'>Колонка Римантаса Григаса</a></div>
  <div class='img'> <img src='/files/columns/grigas.jpg'></div>
  <div class='news'>
    <a href='/ru/news/3174'>Римантас Григас: о пути на Евробаскет (0)</a>
    <a href='/ru/news/1486'>Римантас Григас: об уходе из УГМК и о ближайших планах (1)</a>
    <a href='/ru/news/731'>О горниле «Финала восьми» Евролиги (0)</a>
    <a href='/ru/news/421'>О новом назначении и о сборной Украины (0)</a>
    <a href='/ru/news/299'>О настоящем примере для подражания (0)</a>
  </div><div style='clear:left;'></div> 
  </div>
  <div class='item'>
  <div class='title'><a href='/ru/columns/2'>Колонка Кирилла Натяжко</a></div>
  <div class='img'> <img src='/files/columns/nati.jpg'> </div>
  <div class='news'>
    <a href='/ru/news/3618'>Кирилл Натяжко: "Хорватов мы не боимся" (2)</a>
    <a href='/ru/news/3113'>Кирилл Натяжко: "Необоснованная критика подарила мне дополнительную мотивацию" (1)</a>
    <a href='/ru/news/2454'>Кирилл Натяжко: "Мне нечего бояться, пускай лучше боятся меня!" (6)</a>
    <a href='/ru/news/325'>Доброе утро, страна! (1)</a>
  </div><div style='clear:left;'></div> 
</div>
<div class='news'>
//More divs and links

Вот как я могу вытащить отдельные ссылки "а" и отобразить их, но я хочу получить заголовок div для всех них, в основном классифицировать их вместо того, чтобы располагать все подряд. Я не могу понять, как это сделать в цикле foreach.

foreach ($html->find('div[class=item] a[href*=news]') as $col){
   echo $col.'<br>';
}

Я попытался добавить вместе с первым эхо:

echo $col->parent()->prev_sibling()->prev_sibling()->a;

Это должно вернуться к div 'news', затем еще на одну ступеньку до div 'img' и снова до div 'title'. Это должно получить ссылку первого div=title. Но я ничего не получаю. Есть ли способ сделать это?

2 ответа

Решение

Это способ сделать это, не используя массивы!

foreach ($html->find('div[class=item]') as $item){
    echo $item->children(0)->plaintext;
    foreach ($item->find('a[href*=news]') as $col){
      echo $col.'<br>';
    }
}

Получил желаемый результат!

Попробуй это:

$output = array();
foreach($html->find('div[class=item]' as $item) {
   $title = $item->find('div[class=title] a', 0)->innertext;
   $output[$title] = array();
   foreach($item->find('div[class=news] a') as $link) {
       $output[$title][] = $link->innertext;
   }
}
Другие вопросы по тегам