Разбор всех элементов с помощью PHP Simple HTML DOM Parser - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь проанализировать DOM с помощью простого HTML DOM Parser в PHP.Разобранный контент - это фильмы, поэтому я хочу получить все жанры, но когда я запускаю свой код, я получаю только последний жанр, а не все.Мой код выглядит так:

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, чтобы получить все элементы жанра, но он получает только последний элемент жанра.Что не так в моем коде?

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

Вы просто перезаписываете последний набор данных каждый раз.Вам нужно установить его пустым, а затем добавлять его, используя .= каждый раз, например ...

$item['genres'] = '';
foreach($data->find('a.movie-genre-item') as $genre) {
   $item['genres'] .= $genre->plaintext . ', ';
}
0 голосов
/ 26 мая 2018

Вот код жанра, который вы должны обновить

    // 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,',');
0 голосов
/ 26 мая 2018

Код сохраняет тот же '$ 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);
     }
...