在CodeIgniter中查找目录结构

时间:2013-06-24 09:44:43

标签: php codeigniter

这是我的CodeIgniter代码,用于在我自己的服务器中查找文件夹的目录结构,但它只是深入一级。我想列出给定$path中的所有子目录。这段代码中的错误是什么?

function finddir($path)
{
    $this->load->helper('directory');
    $dir=directory_map($path,1);
    //echo"$path";
    foreach ($dir as $key => $subdir) 
    {
        //echo $subdir."<br/>";
        if(is_dir($subdir))
        {
            echo "<h3>$subdir</h3>";
            $this->finddir($subdir);
        }
        else
        {
            echo "$subdir<br>";
        }

    }
}

输出只有一个深度。由于我使用递归,我希望它进入更深层次。

4 个答案:

答案 0 :(得分:0)

你为什么这样做?

directory_map('source directory')返回一个包含子数组的数组(如果适用,则返回子子数组)。

你得到完整的树 - 只需循环遍历数组并根据需要打印/使用,使用is_array($subdir)来测试它的目录或文件叶。

答案 1 :(得分:0)

尝试使用RecursiveDirectoryIterator

function finddir($path)
{
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
    foreach($objects as $name => $object){
        echo "$name\n";
    }
}

答案 2 :(得分:0)

使两个函数更有意义,这样你就不会在递归函数中重新生成数组。这样生成一次,你就可以递归地从这一个数组中获取值。除非目录类被破坏,否则您不需要检查它是否是目录。如果它是一个数组,那就是一个目录:

function finddir($path){
    $this->load->helper('directory');
    $dir=directory_map($path);
    $this->recursive($dir);
}

function recursive($arr) {
    foreach ($arr as $key => $val) {
        if (is_array($val)){
            echo "<h3>$key</h3>";
            echo "<ul>\n";
            $this->recursive($val);
            echo "</ul>\n";
        } else {
            echo "<li>".$val."</li>\n";
        }
    }
}

您的中断标记<br/>没有很好地显示结构,因此我将其更改为使用嵌套列表。

我刚注意到你正在为directory_map()函数增加值1。这将它限制在一个级别,所以如果你想要一直使用递归,你可能想要把它留下来:

$dir=directory_map($path);

答案 3 :(得分:0)

而不是$dir=directory_map($path,1)删除数字1,因此它以$dir=directory_map($path)的方式显示,因为该数字只会返回第一级目录。