使用 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,',');
我正在尝试使用 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,',');