宝哥软件园

PHP递归创建多级目录

编辑:宝哥软件园 来源:互联网 时间:2021-09-27

我的第一感觉是用递归来创造,具体思路如下:

函数目录($ dir){ if(is _ dir($ dir)| @ mkdir($ dir,0777)){//检查目录是否已经存在或尝试创建它。添加@ suppression符号,因为第一次创建失败,并且将报告“父目录不存在”的警告。回声$dir。已成功创建br ';//输出成功创建的目录}else{$dirArr=explode('/',$ dir);//子目录创建不成功时,尝试创建父目录,使用explode()函数将其剪切成带“/”分隔符的array _ pop($ dirrr);//弹出数组中最后一项(即子目录),$ newdir=implicit ('/',$ dirrr);//重新组合成文件夹字符串Directory($ newDir);//尝试创建父目录if(@mkdir($dir,0777)){echo $dir。已成功创建br ';}//再次尝试创建子目录,成功导出目录名} }目录(' A/B/C/D/E/F ');输出结果如下:

但是可以看出写起来太麻烦了。翻阅手册中的文件函数,我看到一个dirname()函数,它的原型如下:

字符串目录名(字符串$path)

给定一个包含文件完整路径的字符串,这个函数在移除文件名后返回目录名。

在Windows中,斜杠(/)和反斜杠()都可以用作目录分隔符。在其他情况下,它是斜杠(/)。

你可以稍微优化一下:

函数目录($ dir){ if(is _ dir($ dir)| @ mkdir($ dir,0777)) {echo $ dir。已成功创建br ';} else { Directory(dirname($ dir));If(@mkdir($dir,0777)){echo $dir。已成功创建br ';}}}也有同样的效果。之后,我在网上搜索答案,发现了一个异常精辟的答案:

函数Directory($ dir){ return is _ dir($ dir)或Directory(dirname($dir))和mkdir ($dir,0777);}现在解释一下整个功能:

首先介绍PHP中逻辑运算符的优先级顺序:| | AND or,即符号字母类型,以及type或type,所以函数体可以看作:

is_dir ($dir)或(Directory(dirname($dir))和mkdir ($dir,0777));

首先判断目标目录是否存在,如果存在,根据or的短路特性,后面整体短路,跳过执行;如果目标目录不存在,执行以下函数体:

目录(目录名($dir))和mkdir ($dir,0777)

我先考虑了递归的目的:先执行递归,意思是确认其父目录(dirname($dir))已经创建,这样下面的mkdir()函数就不会创建子目录,如果找不到父目录就会发出警告。

进入递归深度后,确认最深根目录存在后,从根目录开始依次向下创建目录。

最后,建议正在找工作的家长去网上找一些大公司的面试问题。毕竟,他们已经得到了全面而深刻的考验。学习知识的时候要刷题做题,因为容易不如别人。我优化了几次初始函数,它们才能正常使用。

这是一个用PHP递归创建多级目录的面试题目。稍后,边肖会找一些有趣的面试问题与大家分享。

更多资讯
游戏推荐
更多+