PHP实现递归目录的5种方法
项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等。这不当前手下的项目就用到了这个,于是总结了几个循环创建目录的方法。
方法一:使用glob循环
<?php //方法一:使用glob循环 functionmyscandir1($path,&$arr){ foreach(glob($path)as$file){ if(is_dir($file)){ myscandir1($file.'/*',$arr); }else{ $arr[]=realpath($file); } } } ?>
方法二:使用dir&&read循环
<?php //方法二:使用dir&&read循环 functionmyscandir2($path,&$arr){ $dir_handle=dir($path); while(($file=$dir_handle->read())!==false){ $p=realpath($path.'/'.$file); if($file!="."&&$file!=".."){ $arr[]=$p; } if(is_dir($p)&&$file!="."&&$file!=".."){ myscandir2($p,$arr); } } } ?>
方法三:使用opendir&&readdir循环
<?php //方法三:使用opendir&&readdir循环 functionmyscandir3($path,&$arr){ $dir_handle=opendir($path); while(($file=readdir($dir_handle))!==false){ $p=realpath($path.'/'.$file); if($file!="."&&$file!=".."){ $arr[]=$p; } if(is_dir($p)&&$file!="."&&$file!=".."){ myscandir3($p,$arr); } } } ?>
方法四:使用scandir循环
<?php //方法四:使用scandir循环 functionmyscandir4($path,&$arr){ $dir_handle=scandir($path); foreach($dir_handleas$file){ $p=realpath($path.'/'.$file); if($file!="."&&$file!=".."){ $arr[]=$p; } if(is_dir($p)&&$file!="."&&$file!=".."){ myscandir4($p,$arr); } } } ?>
方法五:使用SPL循环
<?php //方法五:使用SPL循环 functionmyscandir5($path,&$arr){ $iterator=newDirectoryIterator($path); foreach($iteratoras$fileinfo){ $file=$fileinfo->getFilename(); $p=realpath($path.'/'.$file); if(!$fileinfo->isDot()){ $arr[]=$p; } if($fileinfo->isDir()&&!$fileinfo->isDot()){ myscandir5($p,$arr); } } } ?>
可以用xdebug测试运行时间
<?php myscandir1('./Code',$arr1);//0.164010047913 myscandir2('./Code',$arr2);//0.243014097214 myscandir3('./Code',$arr3);//0.233012914658 myscandir4('./Code',$arr4);//0.240014076233 myscandir5('./Code',$arr5);//0.329999923706 //需要安装xdebug echoxdebug_time_index(),"\n"; ?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。