zoukankan      html  css  js  c++  java
  • 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

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

             

      

  • 相关阅读:
    mysql 的锁
    vsphere虚拟机连网
    三种响应式文字(废弃)
    学习笔记(六)
    优秀 H5 案例收集 vol.3(不定期更新)
    优秀 H5 案例收集 Vol.2(不定期更新)
    优秀 H5 案例收集 vol.1(不定期更新)
    手机调取摄像头问题(getUserMedia)
    ES6 随记(3.3)-- 数组的拓展
    input-file 部分手机不能拍照问题
  • 原文地址:https://www.cnblogs.com/YangJieCheng/p/5686828.html
Copyright © 2011-2022 走看看