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
级联创建目录的思想 还是想必须把上级目录创建成功
php-迭代创建级联目录的更多相关文章
- php-递归创建级联目录
方法一: function mk_dir($path_arr,$root){ if(!empty($path_arr)){ static $path;//每次保存上次调用的值 $path .= '/' ...
- 利用php函数mkdir递归创建层级目录
项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等.这不当前手下的项目就用到了这个,于是总结了几个循环创建层级目录的方法. php默认的mkdir一次只能创建一层目录,而 ...
- MFC 创建多层目录
创建多层目录 BOOL CTestToolCtr::CreateFolder(CString strNewFolder) { /************************************ ...
- php使用递归创建多级目录
<?php header('Content-type:text/html;charset=utf8'); echo "Loading time:".date('Y-m-d H ...
- PHP判断文件夹是否存在和创建文件夹的方法(递归创建多级目录)
在开始之前,我先说明一下,可能许多朋友与我一样认为只要给一个路径,mkdir就可以创建文件夹,其实不是那样,单个的MKDIR只能创建一级目录,对于多级的就不行了,那如何用mkdir来创建呢?先我抄一段 ...
- PHP 检查并创建多级目录
<?php //检查并创建多级目录 function checkDir($path){ $pathArray = explode('/',$path); $no ...
- VS 创建虚拟目录失败,映射到其他文件夹!
今天,改一哥们项目!立马,问了一下原因.支支吾吾的气死LZ! 算了,就不信自己琢磨不出来!哼 找了半天,坑爹的是在Web.csproj文件中! 用txt打开,发现这个东东! <UseIIS> ...
- php创建多级目录的两种方法
1.使用递归的思想 function mkdirs_2($path){ if(!is_dir($path)){ mkdirs_2(dirname($path)); if(!mkdir($path, 0 ...
- PHP递归创建多级目录(一道面试题的解题过程)
今天看到一道面试题,要写出一个可以创建多级目录的函数: 我的第一个感觉就是用递归创建,具体思路如下: function Directory($dir){ if(is_dir($dir) || @mkd ...
随机推荐
- 初识NumPy库-基本操作
ndarray(N-dimensional array)对象是整个numpy库的基础. 它有以下特点: 同质:数组元素的类型和大小相同 定量:数组元素数量是确定的 一.创建简单的数组: np.arra ...
- 排列oj
835:排列 总时间限制: 5000ms 内存限制: 65536kB 描述 题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n= ...
- oracle触发器 调用 web接口
最近要求开发当数据表发生变化的时候调用web接口的需求,上网找了好几篇文章看着都觉得不是很好,也根据别人的思路去实现了下,感觉都不太理想,最后使用URLConnection实现了调用.具体查看一下代码 ...
- 使用pg_buffercache查看缓存区缓存
PG提供了一个扩展pg_buffercache来查看缓存区的内容. create database test; CREATE DATABASE create extension pg_bufferca ...
- linux下yum安装redis以及使用
1.yum install redis --查看是否有redis yum 源 2.yum install epel-release --下载fedora的epel仓库 3. yum ...
- QWT与QT Designer
QWT是一套非常不错的开发库,它能结合QT开发,做出非常好的曲线,刻度,表盘等效果来. qwt的下载以及动态链接库的编译等这里就不做介绍了.在源码目录下可以找到designer目录,其中有插件的源码 ...
- SharePoint Online Add-in 开发简介
作者:陈希章 发表于 2017年12月22日 在 再谈SharePoint大局观 中我提到了SharePoint开发的一些新的变化,这一篇文章我将讲解SharePoint Add-in开发.其实早在2 ...
- 【Hdu3652】B-number(数位DP)
Description 题目大意:求小于n是13的倍数且含有'13'的数的个数. (1 <= n <= 1000000000) Solution 数位DP,题目需要包含13,且被13整除, ...
- 网络相关系列之三:通过GET和POST方法发送数据
写在最前面:年少的安逸舒适在随着年龄的到来和现实生活的压迫总有一天会全数归还(事实上就是<无间道>中那句:"出来混,迟早要还的!") so fighting. 一.GE ...
- Android Studio怎样选择查看指定进程的log?
今天说一个简单的东东,关于Android Studio在logcat中怎样查看指定进程的log. 关于过滤你自己所开发的应用的log.在这篇文章中:Android Studio怎样给log加入过滤项( ...