zoukankan      html  css  js  c++  java
  • 用递归遍历文件夹

    函数的递归调用

    递归的含义

    递归其实也只是一种算法上的描述,不是一种新的语法!

    有时候,我们解决问题的时候,会遇到这种情况,当我们把一个大的问题按照某种解决方案分成若干个小的问题的时候,发现这些小问题的解决方案其实和刚才大问题的解决方案又是一样的!

    典型的,比如:求阶乘!

    10! = 10 * 9!

    9! =  9 * 8!

    8! = 8 * 7!

    ……

    语法上,函数的递归调用,就是函数在执行的过程中自己又调用自己!

    递归的两个要点:

    1,  递归的出口:就是指什么时候停止递归调用

    2,  递归点:就是指什么时候开始使用递归调用

    在写递归调用的时候,先写递归的出口,再写递归点!

    所以,递归调用的特点是:代码书写比较简单,但是执行的时候,比较消耗内存资源!

    也可以说,递归的本质就是以空间换取时间!

    下面是通过递归遍历文件夹的一个小案例:

    代码:

    复制代码
    <?php 
    /**
     * 定义遍历指定路径下文件与文件夹,通过递归的方法
     * @param  $dir string
     */
    function dirs($dir,$level=0){
        //列出指定路径中的文件和目录
        $files=scandir($dir);
    
        //遍历所有的目录
        foreach($files as $file){
    
            //重复一个字符串
            echo str_repeat('&nbsp;',$level*4);
    
            //拼接路径
            $tmpdir=$dir.'/'.$file;
    
            //判断是否是一个目录,文件夹
            if(is_dir($tmpdir)){
                //让文件夹变成红色
                echo "<font style='color:red;'>$tmpdir</font><br/>";
                //目录下有两个隐藏文件.和..,排除掉
                if($file !='.' && $file !='..'){
                    //通过递归的方法,调用自己,进行遍历
                    dirs($tmpdir,$level+1);//递归点
                }
            }else{
                //如果不是一个目录就直接显示这个文件
                echo $file.'<br/>';
            }
    
        }
    }
    
    dirs('d:/sphinx');
    复制代码

    效果:

    下篇我会用递归的方法来实现无限极分类的小案例。

  • 相关阅读:
    Unity在协程内部停止协程自身后代码执行问题
    unity如何停止不用字符串方式开启协程的方法
    解决导入protobuf源代码Unity报错的问题
    FastCGI模式编译安装LAMP+Xcache
    Apache配置防盗链
    Apache配置日志切割
    Apache配置参数的优化
    Apache三种工作模式详解
    隐藏Nginx、Apache、PHP的版本号
    配置Apache控制浏览器端的缓存的有效期
  • 原文地址:https://www.cnblogs.com/pcyy/p/5769513.html
Copyright © 2011-2022 走看看