先例的答案不符合我的需求。
如果您希望将所有文件和目录放在一个平面数组中,您可以使用此功能(找到 here):
// Does not support flag GLOB_BRACE
function glob_recursive($pattern, $flags = 0) {
$files = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
$files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
}
return $files;
}
就我而言:
$paths = glob_recursive(os_path_join($base_path, $current_directory, "*"));
返回一个这样的数组:
[
'/home/dir',
'/home/dir/image.png',
'/home/dir/subdir',
'/home/dir/subdir/file.php',
]
你也可以使用动态路径生成:
$paths = glob_recursive(os_path_join($base_path, $directory, "*"));
有了这个功能:
function os_path_join(...$parts) {
return preg_replace('#'.DIRECTORY_SEPARATOR.'+#', DIRECTORY_SEPARATOR, implode(DIRECTORY_SEPARATOR, array_filter($parts)));
}
如果您只想获取可以使用的目录:
$paths = glob_recursive(os_path_join($base_path, $current_directory, "*"));
$subdirs = array_filter($paths, function($path) {
return is_dir($path);
});