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";
?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。