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
相关产品推荐
相关产品推荐

