PHP简单的HTML DOM解析器 - 结合两个数组

时间:2012-08-13 20:52:45

标签: php html dom web-scraping

我想要做的是在Trip Advisor上抓一页 - 我从第一页获得了我需要的东西然后我再做一个循环来从下一页获取内容但是当我尝试将这些细节添加到现有的数组由于某种原因它不起作用。

error_reporting(E_ALL);
include_once('simple_html_dom.php');

$html = file_get_html('http://www.tripadvisor.co.uk/Hotels-g186534-c2-Glasgow_Scotland-Hotels.html');

$articles = '';

// Find all article blocks
foreach($html->find('.listing') as $hotel) {
    $item['name']     = $hotel->find('.property_title', 0)->plaintext;
    $item['link']     = $hotel->find('.property_title', 0)->href;

    $item['rating']    = $hotel->find('.sprite-ratings', 0)->alt;
    $item['rating']    = explode(' ', $item['rating']);
    $item['rating']    = $item['rating'][0];

    $articles[] = $item;
}

foreach($articles as $article) {

    echo '<pre>';
    print_r($article);
    echo '</pre>';

   $hotel_html = file_get_html('http://www.tripadvisor.co.uk'.$article['link'].'/');

   foreach($hotel_html->find('#MAIN') as $hotel_page) {
       $article['address']            = $hotel_page->find('.street-address', 0)->plaintext;
       $article['extendedaddress']    = $hotel_page->find('.extended-address', 0)->plaintext;
       $article['locality']           = $hotel_page->find('.locality', 0)->plaintext;
       $article['country']            = $hotel_page->find('.country-name', 0)->plaintext;

       echo '<pre>';
       print_r($article);
       echo '</pre>';

       $articles[] = $article;
    }
}

echo '<pre>';
print_r($articles);
echo '</pre>';

以下是我获得的所有调试输出:http://pastebin.com/J0V9WbyE

网址:http://www.4playtheband.co.uk/scraper/

1 个答案:

答案 0 :(得分:1)

我会改变

$articles = '';

为:

$articles = array();

在foreach()之前:

$articlesNew = array();

迭代数组时,插入新数组

$articlesNew[] = $article;

最后合并数组

$articles = array_merge($articles, $articlesNew);

来源:http://php.net/manual/en/function.array-merge.php更多数组php merge / combine。

我从未尝试在PHP中迭代数组时更改数组,但是如果使用C ++集合不正确地执行此操作,除非您处理致命异常,否则它会崩溃。我的猜测是你不应该在迭代时改变数组。我知道我永远不会那样做。使用另一个变量。