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

遍历Youtube API返回的多维关联数组时出现PHP错误求助

解决YouTube API多维数组遍历错误的问题

我看你折腾好久都没搞定这个数组遍历的问题,先帮你拆解下这个API返回的结构,再说说你大概率踩的坑,以及怎么解决。

首先先明确你拿到的数组结构(我帮你格式化了下,看着更清楚):

Array (
[nextPageToken] => CAIQAA
[items] => Array (
[0] => Array (
[snippet] => Array (
[resourceId] => Array (
[videoId] => sGIm0-dQd8M
)
)
)
[1] => Array (
[snippet] => Array (
[resourceId] => Array (
[videoId] => VGd1ml4Hvas
)
)
)
)
)

你之前遍历出错的大概率原因

我猜你应该是直接对着整个返回数组$data_decoded用了foreach,比如:

foreach ($data_decoded as $item) {
    $videoId = $item['snippet']['resourceId']['videoId'];
}

这肯定会报错!因为数组里的nextPageToken是个字符串,不是数组,当循环到它的时候,你去访问['snippet']自然会触发"Undefined index"或者"Cannot use string offset as an array"的错误。

正确的遍历方式

你要遍历的是数组里的items字段,这才是存放视频列表的地方,而且要做好容错检查(避免API返回结构异常或者空数据),代码示例如下:

// 假设$data_decoded是你json_decode后的API返回数组
if (isset($data_decoded['items']) && is_array($data_decoded['items']) && !empty($data_decoded['items'])) {
    foreach ($data_decoded['items'] as $videoItem) {
        // 逐层检查键是否存在,防止某个条目缺少字段导致报错
        if (isset($videoItem['snippet'], $videoItem['snippet']['resourceId'], $videoItem['snippet']['resourceId']['videoId'])) {
            $videoId = $videoItem['snippet']['resourceId']['videoId'];
            echo "获取到视频ID:{$videoId}\n";
        } else {
            echo "当前视频条目缺少必要字段,跳过\n";
        }
    }
} else {
    echo "没有获取到任何视频数据\n";
}

额外提醒

  • 永远不要假设API返回的结构完全符合预期,一定要用isset()或者array_key_exists()检查每个层级的键是否存在
  • 如果你的API请求可能返回空的items列表,提前判断是否为空,避免foreach遍历空数组的警告
  • 要是后续需要翻页,nextPageToken可以留着用来请求下一页数据

内容的提问来源于stack exchange,提问作者Kokox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:23:24