You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:45:41