跟踪递归函数的状态

时间:2011-12-23 18:51:54

标签: php recursion

我正在使用我在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 个答案:

答案 0 :(得分:1)

更改...

$dir_array[ $d ] = $d;

为...

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