Search code examples
phphtmldomsimple-html-dom

Parse all items with PHP Simple HTML DOM Parser


I'm trying to parse DOM with Simple HTML DOM Parser in PHP. Parsed content are movies, so I want to get every genre there is, but when i run my code I only get the last genre, not all. My code looks like this:

if ($obj) {
    foreach($obj as $key => $data) {
        $item['url'] = 'http://geo.saitebi.ge/movie/' . $page;
        $item['poster'] = 'http://geo.saitebi.ge/web/ka/img/movies/' . $page . '/240x340/' . $page . '.jpg';
        $item['geotitle'] = $data->find('div.movie-item-title', 0)->plaintext;
        $item['englishtitle'] = $data->find('div.movie-item-title-en', 0)->plaintext;
        $item['year'] = $data->find('div.movie-item-year', 0)->plaintext;
        foreach($data->find('a.movie-genre-item') as $genre) {
            $item['genres'] = $genre->plaintext . ', ';
        }
        $item['description'] = $data->find('div.movie-desctiption-more', 0)->plaintext;
        $item['imdb_rating'] = $data->find('a.imdb_vote', 0)->plaintext;
        $item['imdb_id'] = trim(substr($data->find('a.imdb_vote',0)->href, strrpos($data->find('a.imdb_vote',0)->href, '/') + 1));
    }
}

As you see I'm getting content as array. Then inside it I run another foreach loop to get all genre items but it only gets last genre item. What is wrong in my code?


Solution

  • You are just overwriting the last set of data each time. You need to set it to blank and then append it using .= each time, like...

    $item['genres'] = '';
    foreach($data->find('a.movie-genre-item') as $genre) {
       $item['genres'] .= $genre->plaintext . ', ';
    }