2011-12-23 100 views
0

我正在使用PHP.net上的一个函数,该函数递归检查目录及其内容。它为每个子目录创建一个嵌套数组,这些数组的元素与文件名相对应。跨递归函数跟踪状态

它不跟踪文件路径。这就是我想要的。下面的代码:

function get_directory_tree($outerDir, $filters = array()){ 
    $dirs = array_diff( 
      scandir($outerDir), 
      array_merge(Array(".", ".."), $filters) 
     ); 

    $dir_array = Array(); 

    foreach($dirs as $d){ 
    if(is_dir($outerDir."/".$d)){ 
     $dir_array[ $d ] = get_directory_tree($outerDir."/".$d, $filters); 
    } else { 
     $dir_array[ $d ] = $d; 
    } 
    } 
    return $dir_array; 
    } 

,并将其输出为我的测试案例:

Array(
    [a] => Array(
     [aa] => Array(
       [hjkl.txt] => hjkl.txt 
      ) 
     [asdf.txt] => asdf.txt 
    ) 
    [b] => Array() 
    [c] => Array() 
) 

而这正是我想它想的输出:

Array(
    [a] => Array(
     [aa] => Array(
       [hjkl.txt] => 'a/aa/hjkl.txt' 
      ) 
     [asdf.txt] => 'a/asdf.txt' 
    ) 
    [b] => Array() 
    [c] => Array() 
) 

回答

1

更改...

$dir_array[ $d ] = $d; 

...

$dir_array[ $d ] = $outerDir."/".$d; 
+0

干杯!递归使我的大脑模糊不清。 – 2011-12-23 18:55:13