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

PHP调用Google Drive API获取目录文件列表时,无法生成包含子目录内容的完整数组问题求助

PHP调用Google Drive API获取目录文件列表时,无法生成包含子目录内容的完整数组问题求助

嘿,我一眼就看出问题在哪啦!你写的递归函数listFiles在处理子文件夹的时候,确实调用了自身去遍历子目录,但你没有把递归返回的子目录文件数组合并到当前的$list_array里,所以最终只有根目录的文件/文件夹被存进了数组,子目录的内容都丢啦~

问题根源

看这段代码:

if ($file->mimeType == 'application/vnd.google-apps.folder') {
    listFiles($service, $file->getId(), $filePath);
}

你只是执行了递归函数,但函数返回的子数组完全没被处理,自然不会加到主数组里。

修复方案

只需要把递归返回的数组合并到当前的$list_array中就行,用array_merge最简洁:

if ($file->mimeType == 'application/vnd.google-apps.folder') {
    // 把递归返回的子目录数组合并到当前数组
    $list_array = array_merge($list_array, listFiles($service, $file->getId(), $filePath));
}

修改后的完整代码

$copy_from_id = '1ayLi94BVtYHvzmbBXmmW3siQrwiJOotc';

function listFiles($service, $folderId, $path = ''): array
{
    $results = $service->files->listFiles([
        'orderBy' => "name",
        'q' => "'$folderId' in parents",
    ]);

    $list_array = [];

    foreach ($results->getFiles() as $file) {
        $filePath = $path . '/' . $file->getName();
        echo $filePath."<br />";
        $list_array[] = $filePath;

        if ($file->mimeType == 'application/vnd.google-apps.folder') {
            // 关键修改:合并递归返回的子数组
            $list_array = array_merge($list_array, listFiles($service, $file->getId(), $filePath));
        }
    }

    return $list_array;
}

$list_array = listFiles($service, $copy_from_id);
echo '<pre>' . print_r($list_array, true) . '</pre>';

效果验证

修改后再运行,你的$list_array就会包含所有子目录里的文件路径啦,和你用echo输出的内容完全对应~

备注:内容来源于stack exchange,提问作者GENC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:14:29