关于php递归函数创建级联目录的困惑
所有刚开始接触php的可能都要求写个作业,就是用递归函数创建级联目录。我以前学asp.net的,也算有基础,所以就找了些PHP快速入门的视频看了一下。用递归做级联目录我在...
所有刚开始接触php的可能都要求写个作业,就是用递归函数创建级联目录。
我以前学asp.net的,也算有基础,所以就找了些PHP快速入门的视频看了一下。
用递归做级联目录我在网上找到一个代码是这样写的,如下:
function mkdir1($dir)
{
if (is_dir($dir))
{
return true;
}
if (is_dir(dirname($dir)))
{
return mkdir($dir);
}
else
{
mkdir1(dirname($dir));
return mkdir($dir);
}
}
我对代码是这样的,虽然是网上找的,但我必须要了解每段代码的含义,而且要知道它的运行方式。
后来我觉得上面的代码有点过于,就把代码简化了。
function mkdir1($dir)
{
if (is_dir($dir))
{
return '所有文件夹都已存在';
}
mkdir1(dirname($dir));
mkdir($dir);
}
mkdir1('a/b/c/d/e');
两段代码都可以正常执行,创建出a b c d e几个目录,路径就是a/b/c/d/e
但是我怎么也搞不懂是怎么创建出来的。
用简化过得代码说吧,我用我理解的说哈,
函数内首先判断a/b/c/d/e这个目录是否存在,如果存在返回文字提示并推出函数。
第一次运行当然不存在咯,转到mkdir1(dirname($dir));开始递归调用,这里我就不明白了,mkdir1(dirname($dir));执行后,是什么时候继续执行下面的 mkdir($dir);,并且是怎么创建出来的。
用dirname($dir)获取的第一次的目录是a/b/c/d
然后依次是
a/b/c
a/b
a
不管是哪个,这个时候a目录反正是不存在的,那么第一次获取到a/b/c/d的时候,mkdir($dir);应该提示不存在该目录啊,到底是什么时候开始创建的a目录啊。
请大师帮我理一下执行顺序啊。 展开
我以前学asp.net的,也算有基础,所以就找了些PHP快速入门的视频看了一下。
用递归做级联目录我在网上找到一个代码是这样写的,如下:
function mkdir1($dir)
{
if (is_dir($dir))
{
return true;
}
if (is_dir(dirname($dir)))
{
return mkdir($dir);
}
else
{
mkdir1(dirname($dir));
return mkdir($dir);
}
}
我对代码是这样的,虽然是网上找的,但我必须要了解每段代码的含义,而且要知道它的运行方式。
后来我觉得上面的代码有点过于,就把代码简化了。
function mkdir1($dir)
{
if (is_dir($dir))
{
return '所有文件夹都已存在';
}
mkdir1(dirname($dir));
mkdir($dir);
}
mkdir1('a/b/c/d/e');
两段代码都可以正常执行,创建出a b c d e几个目录,路径就是a/b/c/d/e
但是我怎么也搞不懂是怎么创建出来的。
用简化过得代码说吧,我用我理解的说哈,
函数内首先判断a/b/c/d/e这个目录是否存在,如果存在返回文字提示并推出函数。
第一次运行当然不存在咯,转到mkdir1(dirname($dir));开始递归调用,这里我就不明白了,mkdir1(dirname($dir));执行后,是什么时候继续执行下面的 mkdir($dir);,并且是怎么创建出来的。
用dirname($dir)获取的第一次的目录是a/b/c/d
然后依次是
a/b/c
a/b
a
不管是哪个,这个时候a目录反正是不存在的,那么第一次获取到a/b/c/d的时候,mkdir($dir);应该提示不存在该目录啊,到底是什么时候开始创建的a目录啊。
请大师帮我理一下执行顺序啊。 展开
1个回答
展开全部
mkdir1刚进去就是判断$dir存不存在,a/b/c/d/e说白了就是判断有没有e文件夹
如果没有 继续dirname($dir) 判断a/b/c/d路径的d文件夹有没有
如果没有 继续dirname($dir) 判断a/b/c路径的c文件夹有没有
依此类推直到
dirname($dir) 判断a路径的时候 不存在执行当前递归层的mkdir($dir) 创建a
存在则return,然后执行当前递归层上一级的mkdir($dir) 创建a/b
之后继续上一级的mkdir($dir) 创建a/b/c
直到创建完a/b/c/d/e 递归结束
如果没有 继续dirname($dir) 判断a/b/c/d路径的d文件夹有没有
如果没有 继续dirname($dir) 判断a/b/c路径的c文件夹有没有
依此类推直到
dirname($dir) 判断a路径的时候 不存在执行当前递归层的mkdir($dir) 创建a
存在则return,然后执行当前递归层上一级的mkdir($dir) 创建a/b
之后继续上一级的mkdir($dir) 创建a/b/c
直到创建完a/b/c/d/e 递归结束
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询