使用PHP Simple HTML DOM Parser解析电影DOM仅获最后一个类型的问题
问题:PHP Simple HTML DOM Parser 仅获取到最后一个电影类型的原因及修复方案
嘿,我一眼就瞅出问题所在啦!你现在只能拿到最后一个电影类型,是因为循环里的赋值逻辑错了——每次迭代都在覆盖$item['genres']的值,而不是把所有类型累加起来。
看你代码里的这段循环:
foreach($data->find('a.movie-genre-item') as $genre) { $item['genres'] = $genre->plaintext . ', '; }
每遍历到一个类型,你都直接把$item['genres']重新赋值为当前类型的文本加逗号,之前的类型内容全被覆盖了,循环结束后自然只剩下最后一个类型。
修复方案
有两种常用的修复方式,选哪种都可以:
方式1:字符串累加(简单直接)
先在循环前把$item['genres']初始化为空字符串,然后用.运算符追加每个类型的内容,最后再去掉末尾多余的逗号和空格:
// 初始化空字符串 $item['genres'] = ''; foreach($data->find('a.movie-genre-item') as $genre) { // 用.=追加内容,而不是直接赋值 $item['genres'] .= $genre->plaintext . ', '; } // 移除末尾多余的逗号和空格 $item['genres'] = rtrim($item['genres'], ', ');
方式2:数组收集再转字符串(更灵活)
先把所有类型存入数组,最后用implode()把数组转成逗号分隔的字符串,这种方式后续如果要对类型做筛选、去重等操作会更方便:
// 初始化空数组 $item['genres'] = []; foreach($data->find('a.movie-genre-item') as $genre) { $item['genres'][] = $genre->plaintext; } // 数组转成逗号分隔的字符串 $item['genres'] = implode(', ', $item['genres']);
把上面的代码替换你原来的循环部分,就能成功获取到所有电影类型啦!
内容的提问来源于stack exchange,提问作者DaftPlug
相关产品推荐
相关产品推荐

