递归列出目录

时间:2016-08-09 10:01:20

标签: php directory

我有以下功能:

function listFiles($dir, $results = array()){       
    $entities = is_dir($dir) ? array_values(array_diff(scandir($dir), array('..', '.'))) : false ;  
    if( $entities )
        foreach( $entities as $e ) {
            $path = $dir.'/'.$e;
            if( is_dir($path) ) {
                listFiles($path, $results);
            }   
            $results[] = $path;
        }
        return $results;
    }
print_r(listFiles('/home/apps/public_html/test_folder'));

虽然这在某种程度上起作用,但数组只有目录的第一个分支。但是,如果我回显foreach中的路径,我会从所有文件夹和子文件夹中获取每个文件的路径,等等。

这可能是非常小的但我无法弄清楚什么,我可以使用一些帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

在递归函数内部,如果找到了一个子目录,你用子句调用函数本身,但它的结果没有处理,没有分配给任何变量,所以它们会丢失,你应该把它推到你的结果中这样:

if( is_dir($path) ){
    $results[] = listFiles($path, $results);
}