方法一代码:

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

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

php-迭代创建级联目录的更多相关文章

  1. php-递归创建级联目录

    方法一: function mk_dir($path_arr,$root){ if(!empty($path_arr)){ static $path;//每次保存上次调用的值 $path .= '/' ...

  2. 利用php函数mkdir递归创建层级目录

    项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等.这不当前手下的项目就用到了这个,于是总结了几个循环创建层级目录的方法. php默认的mkdir一次只能创建一层目录,而 ...

  3. MFC 创建多层目录

    创建多层目录 BOOL CTestToolCtr::CreateFolder(CString strNewFolder) { /************************************ ...

  4. php使用递归创建多级目录

    <?php header('Content-type:text/html;charset=utf8'); echo "Loading time:".date('Y-m-d H ...

  5. PHP判断文件夹是否存在和创建文件夹的方法(递归创建多级目录)

    在开始之前,我先说明一下,可能许多朋友与我一样认为只要给一个路径,mkdir就可以创建文件夹,其实不是那样,单个的MKDIR只能创建一级目录,对于多级的就不行了,那如何用mkdir来创建呢?先我抄一段 ...

  6. PHP 检查并创建多级目录

    <?php //检查并创建多级目录    function checkDir($path){        $pathArray = explode('/',$path);        $no ...

  7. VS 创建虚拟目录失败,映射到其他文件夹!

    今天,改一哥们项目!立马,问了一下原因.支支吾吾的气死LZ! 算了,就不信自己琢磨不出来!哼 找了半天,坑爹的是在Web.csproj文件中! 用txt打开,发现这个东东! <UseIIS> ...

  8. php创建多级目录的两种方法

    1.使用递归的思想 function mkdirs_2($path){ if(!is_dir($path)){ mkdirs_2(dirname($path)); if(!mkdir($path, 0 ...

  9. PHP递归创建多级目录(一道面试题的解题过程)

    今天看到一道面试题,要写出一个可以创建多级目录的函数: 我的第一个感觉就是用递归创建,具体思路如下: function Directory($dir){ if(is_dir($dir) || @mkd ...

随机推荐

  1. 十五、Hadoop学习笔记————Zookeeper客户端的使用

    timeout表示会话超时时间,zookeeper靠与客户的心跳来判断会话是否有效(单位毫秒), -r为只读,表示zookeeper如果与半数以上服务器失去连接则会停止服务,如果有-r参数,则会继续保 ...

  2. JS构造函数模式

    构造函数是可以创建特定类型对象的函数,可以接受参数定义函数成员.如果之前做过java比较好理解,举个例子: function exampleFunction(arg1, arg2, arg3){ th ...

  3. 去培训机构参加IT培训值不值

    近几年,IT培训机构可谓是琳琅满目,稂莠不齐.培训Java的,培训PHP的,培训大数据的等等吧,不一而足. 自己也算是IT技术圈子待了好多年了,面试过一些机构培训出来的学生,也有几个好哥们在培训机构做 ...

  4. Python简单爬虫

    爬虫简介 自动抓取互联网信息的程序 从一个词条的URL访问到所有相关词条的URL,并提取出有价值的数据 价值:互联网的数据为我所用 简单爬虫架构 实现爬虫,需要从以下几个方面考虑 爬虫调度端:启动爬虫 ...

  5. Centos 安装boost库

    1.在http://www.boost.org/下载boost安装包boost_1_65_1.tar.gz 2.在Centos上解压tar -zxvf  boost_1_65_1.tar.gz后,cd ...

  6. 爱立信开始大规模mesh网络测试

    mesh网络可谓是物联网之关键,相较于传统有线技术,无线连接的mesh网络实施成本较低,而且更具有适应性和可扩展性,让高通信量的应用更加可靠. 虽然Thread和ZigBee等细分技术也能提供标准化的 ...

  7. 使用Navicat导入.csv文件(过程和注意点)

    1.创建一个数据库,右键点击表,选择导入向导. 2.在跳出的弹窗中选择.CSV文件,点击下一步 3.选择文件来源和编码规格,点击下一步 如果发现上传后中文出现乱码请使用10008这个编码规则 4.选择 ...

  8. django框架中的中间件

    什么是中间件 中间件就是在url进入路由之前进行检测的一个类 也就是说,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对 ...

  9. mysql读写分离的操作动作依据(读写分离基本依据)

    读的操作: 1.select 2.show 3.explain explain显示了MySQL如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 4.desc ...

  10. Webpack3.0入门指南

    前言 本文是基于我厂基友的Webpack学习系列(一)初学者使用教程 这篇文章做构建.可能基友的文章是基于Mac环境,我是windows环境,在学习时遇到了很多坑,询问基友,他让我搞个基于window ...