php获取指定目录的所有子孙目录
方法一:scandir + 递归
function getAllSubdirectories($path) {
$subdirs = [];
$items = scandir($path);
foreach ($items as $item) {
if ($item === '.' || $item === '..') continue;
$fullPath = $path . DIRECTORY_SEPARATOR . $item;
if (is_dir($fullPath)) {
// 添加当前目录
$subdirs[] = $fullPath;
// 递归获取子目录的子目录
$subdirs = array_merge($subdirs, getAllSubdirectories($fullPath));
}
}
return $subdirs;
}
// 使用示例
$allSubdirs = getAllSubdirectories('/path/to/directory');
print_r($allSubdirs);
方法二:使用 RecursiveDirectoryIterator(推荐)
function getAllSubdirectoriesIterator($path) {
$subdirs = [];
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $fileinfo) {
if ($fileinfo->isDir()) {
$subdirs[] = $fileinfo->getPathname();
}
}
return $subdirs;
}
// 使用示例
$allSubdirs = getAllSubdirectoriesIterator('/path/to/directory');
print_r($allSubdirs);
