使用 PHP 简单 HTML DOM 解析器解析所有项目

Parse all items with PHP Simple HTML DOM Parser

我正在尝试使用 PHP 中的简单 HTML DOM 解析器解析 DOM。解析的内容是电影,所以我想获得所有类型,但是当我 运行 我的代码时,我只获得最后一种类型,而不是全部。我的代码如下所示:

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));
    }
}

如您所见,我正在获取数组形式的内容。然后在其中我 运行 另一个 foreach 循环来获取所有流派项目,但它只获取最后一个流派项目。我的代码有什么问题?

代码正在使用密钥 'genres' 在 $item 中保存相同的“$genre->plaintext” 所以相同的键替换每个循环的值。

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

可能 $item['genres] 可以是一个关联数组..我的意思是:

foreach($data->find('a.movie-genre-item') as $genre) {
             if ( !isset($item[$genre]) ) {
                      $item[$genre] = array();
              }
          array_push($item[$genre],$genre->plaintext);
     }

你每次都只是在覆盖最后一组数据。您需要将其设置为空白,然后每次使用 .= 附加它,例如...

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

这是您必须更新的流派代码

    // Here is you genre code 
    $movie_genre='';
    foreach($data->find('a.movie-genre-item') as $genre) {
        $movie_genre .= $genre->plaintext . ',';
    }

    // Here you can use rtrim for removing last comma from genre
    $item['genres'] = rtrim($movie_genre,',');