два условия PHPSimpleHtmlDom в одном цикле foreach

Я использую PHPSimpleHTMLDOM Parser и хочу каким-то образом реализовать цикл foreach с двумя условиями. Я получаю заголовки, которые мне нужны, но я также хочу получить href, который относится к этому конкретному заголовку. Если я напишу вложенный цикл foreach только для href, он зациклится слишком много раз и выведет много дубликатов. Вот мой код:

include_once ('simple_html_dom.php');
$html = file_get_html('somehtml.com');

  foreach ($html->find('ul[class=headlines] li') as $return){
    //if I put another foreach here, too many duplicates
    echo $return;
  }

Другой цикл foreach выглядит так:

foreach ($html->find('ul[class=headlines] li a') as $href){
  $link = $href->href;
  echo $link;
}

Как я могу поместить эти два условия в один цикл foreach, чтобы ссылка соответствовала правильной статье, и я мог передать ее другому php-файлу, чтобы что-то с ним сделать? заранее спасибо


person user2025469    schedule 28.02.2013    source источник
comment
Просто предложение. Используйте cURL.   -  person SilentAssassin    schedule 28.02.2013
comment
Можете быть более конкретными? Как бы я это сделал?   -  person user2025469    schedule 28.02.2013
comment
Ищите в гугле и здесь. Есть много примеров. Я использовал его для извлечения якорных ссылок со страницы. Вы можете проверить это для получения дополнительной информации о cURL. Я не даю решения, это просто предложение, как я сказал ранее.   -  person SilentAssassin    schedule 28.02.2013


Ответы (1)


Предположим, у вас есть следующая структура HTML:

<ul class="headlines">
    <li><a href="http://google.com">Google</a></li> 
    <li><a href="http://yahoo.com">Yahoo</a></li>   
    <li><a href="http://bing.com">Bing</a></li>
</ul>

Затем вам нужно обойти все элементы li и получить их n-й дочерний элемент, который соответствует тегу a (в данном случае это первый) следующим образом:

foreach ($html->find('ul[class=headlines] li') as $return){
    $a = $return->children(0);
    echo 'Link: ' . $a->href . '<br />';
    echo 'Headline: ' . $a->plaintext . '<br />';
}

Обратите внимание, что вы можете просто распечатать здесь $a, не извлекая отдельно ссылку и заголовок.

Я бы посоветовал вам использовать какое-нибудь родное расширение на основе libxml для повышения производительности, например DOM. Вы также можете комбинировать его с XPath, чтобы упростить задачу.

person cth    schedule 28.02.2013