首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递推函数中的Scandir

递推函数中的Scandir
EN

Stack Overflow用户
提问于 2022-02-24 20:02:14
回答 2查看 211关注 0票数 0

我正在尝试创建一个递归函数来使用scandir()显示目录树。

我试过下面的代码,但是它一直在发送

警告: foreach()参数必须是类型为数组\对象的

我做错了什么?

代码语言:javascript
复制
$dir = scandir('.');

function scan($location) {
    
    foreach($location as $path) {

        if (is_dir($path)) {

            scan($path);
        }

        else {
            echo $path.'<br>';
        }
    }
}

scan($dir);
EN

回答 2

Stack Overflow用户

发布于 2022-02-24 20:24:04

在第一个调用中,发送scandir()的结果,这是一个数组(或false)。然后,在递归调用中,发送一个字符串。

然后,您需要注意scandir()的结果。它返回...:当前目录和父目录。

函数中包含scandir()的代码:

代码语言:javascript
复制
function scan($location) 
{
    $dirs = scandir($location);
    foreach($dirs as $path) {

        if ($path == '.' || $path == '..') continue;
        
        if (is_dir($path)) {

            scan($path);
        }

        else {
            echo $path.'<br>'; // 
        }
    }
}

scan('.');

此外,您还可以查看DirectoryIterator类FilesystemIterator类

票数 1
EN

Stack Overflow用户

发布于 2022-02-24 20:22:32

scandir也返回. (此dir)和.. (父dir)。你应该无视他们。

代码语言:javascript
复制
if ($path != '.' && $path != '..' && is_dir($path)){
    scan(scandir($path));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71257610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档