PHP调用themoviedb API通过imdb_id查询时无法解析获取返回id值
问题根因
直接读取$json['id']返回空,是因为TMDB的find接口返回值是多层嵌套结构,id字段不在JSON根层级。
你调用array_values()把原返回的关联数组转成了索引数组,从打印结果能看到目标id实际在3层嵌套下:外层索引0 → 内层索引0 → id字段,对应原接口返回的movie_results结果集下的第一条匹配数据。
正确获取方式
不要用array_values()丢弃原数组的字符串键名,直接按接口固定返回结构取值即可,兼容所有匹配类型的代码如下:
$url = "https://api.themoviedb.org/3/find/".$imdbId."?api_key=$apikey&language=en-US&external_source=imdb_id"; $content = file_get_contents($url, false); $response = json_decode($content, true); $tmdbId = null; // 按优先级遍历所有可能的结果类型,取第一条匹配数据的id $matchTypes = ['movie_results', 'tv_results', 'person_results', 'tv_episode_results', 'tv_season_results']; foreach ($matchTypes as $type) { if (isset($response[$type][0]['id'])) { $tmdbId = $response[$type][0]['id']; break; } } // 后续可直接存储、使用$tmdbId变量 var_dump($tmdbId);
注意事项
- 用
array_values()转索引数组的写法稳定性极差,只要接口返回字段顺序调整就会取错值,不适合用来解析接口返回 - 单个imdb_id仅会匹配唯一一条TMDB数据,所以取对应结果集的第0个元素即可
- 增加类型遍历和
isset()判断,是为了兼容imdb_id对应电影、剧集、人物等不同类型条目的场景,同时避免无匹配结果时抛出数组访问报错
内容的提问来源于stack exchange,提问作者m00tor
相关产品推荐
相关产品推荐

