这是我的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>";
}
}
}
输出只有一个深度。由于我使用递归,我希望它进入更深层次。
答案 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)
的方式显示,因为该数字只会返回第一级目录。