【问题标题】:Parse all items with PHP Simple HTML DOM Parser使用 PHP Simple HTML DOM Parser 解析所有项目
【发布时间】:2018-05-26 08:25:52
【问题描述】:

我正在尝试使用 PHP 中的 Simple HTML DOM Parser 来解析 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 循环来获取所有类型项目,但它只获取最后一个类型项目。我的代码有什么问题?

【问题讨论】:

    标签: php html dom simple-html-dom


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      代码将相同的“$genre->plaintext”保存在 $item 中,键为“genres” 所以每个循环都用相同的键替换值。

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

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

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

      【讨论】:

      • 不需要这样做。我只是每次都覆盖最后一组数据,所以我需要将其设置为空白,然后每次都使用 .= 附加它。以上答案解决了问题:)谢谢!
      【解决方案3】:

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

          // 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,',');
      

      【讨论】:

      • 非常感谢您提供了从流派中删除最后一个逗号的修复程序。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      相关资源
      最近更新 更多