试图手动创建递归目录迭代器

时间:2013-01-30 05:06:51

标签: php recursion iterator directory

我对PHP和编程相对较新,我正在尝试浏览目录并查找所有子目录,以及这些子目录的所有子目录,依此类推。我google了一下,偶然发现了递归的概念,我立即知道这是我需要的,因为从概念上我已经意识到它,但只是不知道它是否可能。由于我对PHP语言结构的理解有限(以及通用编程结构),我在这里遇到了一些障碍。我看到了一些关于语言中内置的迭代器的内容,但我想了解它的内容并能够将它组合在一起。

我已经创建了一个函数,据我所知,它应该能够获取一个已经预先填充了根文件夹中的目录的数组(使用前面的glob函数),然后查看每个函数其中并继续钻研,直到找不到新的目录......但这似乎不是这里发生的事情。它正在吐出一个错误,告诉我字符串不支持'[]'运算符,但据我所知,'$ arrayName [$ key]'是一个数组对象,而不是字符串。即使解决了这个特殊问题,您能否请专家告诉我这是否有效,如果没有,需要做什么?

$directory_list[0] = "directory1";
$directory_list[1] = "directory2";
$directory_list[2] = "directory3";

function iterate_unknown_directories($arrayName) {
    foreach ($arrayName as $key => $arrayObject) {
        $directories_check = glob($arrayObject."/*",GLOB_ONLYDIR);
        foreach ($directories_check as $directory) {
            if ($directory !== getcwd()) {
                if ($directory !== $arrayObject) {
                    $arrayName[$key][] = $directory;
                }
            }
        }
        if (is_array($arrayName[$key])) {
            iterate_unknown_directories($arrayName[$key]);
        }
        echo $arrayObject;
    }
}

iterate_unknown_directories($directory_list);

我查看了我能找到的资源,但似乎没有一个能给我我所需要的资源。非常感谢您阅读这篇文章,并希望能够伸出援助之手!

1 个答案:

答案 0 :(得分:0)

我很确定你的问题太复杂了。试着看看这个:

function iterate_unknown_directories($dirs)
{
    foreach ($dirs as $dir)
    {
        $subDirs = glob($dir . "/*", GLOB_ONLYDIR);

        /* print out all the new directories*/
        foreach ($subDirs as $subDir)
            echo $subDir . "<br>";

        // recursively search the new directories
        iterate_unknown_directories($subDirs);
    }
}

$directories = array(
    'test_dir'
);

iterate_unknown_directories($directories);