• php-迭代创建级联目录


    方法一代码:

    path = './a/b/c/d/e/f';
      $path_arr = explode('/',$path);//得到数组array('.','a','b','c','d','e','f');
      for($i=0;$i<count($path_arr);$i++){
          static $dir;//只初始化一次,保留上次调用的值
          $dir .= $path_arr[$i].'/';//i=0 ./ i=1 ./a i=2 ./a/b .....
          //echo $dir,'<br/>';
          if(!is_dir($dir)){//过滤下 如果已经是目录就不创建 比如 ./
              echo mkdir($dir)?'ok<br/>':'fail<br/>';//创建
           }
      }

    方法二代码:

          

     function mk_dir($dir){
    
                   //$dir_arr  = array();//定义一个空数组用来存放路径  可以把它想象成为一个工作单
    
                   while(!is_dir($dir)){ //如果$dir不是目录  那么就表示这个工作还没做 因此就放入工作单里
    
             array_push($dir_arr,$dir);
    
            $dir = dirname($dir);//取得上级目录在赋值给$dir 
    
          }
    
                  //上面是把新工作(不是目录的)存入到数组
    
               while(count($dir_arr)){
    
                $list = array_pop($dir_arr);
    
                                          mkdir($list);
    
          }
    
        //通过出栈 来层层创建目录
    
    }
    
    $path ='./a/b/c/d';
    
    mk_dir($path);

    模拟过程:

                          $dir = './a/b/c/d';

                         $dir 不是目录,进入循环

                        $dir_arr =array('./a/b/c/d');

                      $dir = dirname($dir)='./a/b/c';

                       $dir 不是目录,进入循环

                   $dir_arr =array('./a/b/c/d','./a/b/c');

        $dir = dirname($dir)='./a/b';

        $dir 不是目录,进入循环

        $dir_arr =array('./a/b/c/d','./a/b/c','./a/b');

                  $dir = dirname($dir)='./a';

        $dir 不是目录,进入循环

        $dir_arr =array('./a/b/c/d','./a/b/c','./a/b','./a');

                $dir = dirname($dir)='./';

      $dir 是目录,退出循环

    ------------------------------------------------

     <退出循环后的数组>array('./a/b/c/d','./a/b/c','./a/b','./a');

    进入 出栈循环

                  count($dir_arr) =4  进入循环

                $list = array_pop($dir_arr) = './a';

                 mkdir($list);//a目录创建

      count($dir_arr) =3  进入循环

                $list = array_pop($dir_arr) = './a/b';

                 mkdir($list);//a/b目录创建

      count($dir_arr) =2  进入循环

                $list = array_pop($dir_arr) = './a/b/c';

                 mkdir($list);//a/b/c目录创建

      count($dir_arr) =1  进入循环

                $list = array_pop($dir_arr) = './a/b/c/d';

                 mkdir($list);//a/b/c/d目录创建

      count($dir_arr) =0  退出循环

    ----------------------------------------

    总结:递归换成迭代的 要 借助栈的思想或者static

                级联创建目录的思想 还是想必须把上级目录创建成功

             

      

  • 相关阅读:
    Emacs 安装 jedi
    PHP+ MongoDB
    Debian 7 安装 Emacs 24.3
    在Code first中使用数据库里的视图
    Emacs安装auto-complete
    Debian 7.4 中配置PHP环境
    ASP.NET MVC 下载列表
    JDicom使用指南
    Windows常用的DOS命令
    Entity Framework问题总结
  • 原文地址:https://www.cnblogs.com/YangJieCheng/p/5686828.html
Copyright © 2020-2023  润新知