PHP实现递归目录的5种方法


Posted in PHP onOctober 27, 2016

项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等。这不当前手下的项目就用到了这个,于是总结了几个循环创建目录的方法。

方法一:使用glob循环

<?php
//方法一:使用glob循环
 
function myscandir1($path, &$arr) {
 
  foreach (glob($path) as $file) {
    if (is_dir($file)) {
      myscandir1($file . '/*', $arr);
    } else {
 
      $arr[] = realpath($file);
    }
  }
}
?>

方法二:使用dir && read循环

<?php
//方法二:使用dir && read循环
function myscandir2($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循环
function myscandir3($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循环
function myscandir4($path, &$arr) {
   
  $dir_handle = scandir($path);
  foreach ($dir_handle as $file) {
 
    $p = realpath($path . '/' . $file);
    if ($file != "." && $file != "..") {
      $arr[] = $p;
    }
    if (is_dir($p) && $file != "." && $file != "..") {
      myscandir4($p, $arr);
    }
  }
}
 ?>

方法五:使用SPL循环

<?php
//方法五:使用SPL循环
function myscandir5($path, &$arr) {
 
  $iterator = new DirectoryIterator($path);
  foreach ($iterator as $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
echo xdebug_time_index(), "\n";
?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
一个PHP缓存类代码(附详细说明)
Jun 09 PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 PHP
php使用ereg验证文件上传的方法
Dec 16 PHP
PHP性能分析工具XHProf安装使用教程
May 13 PHP
php进行ip地址掩码运算处理的方法
Jul 11 PHP
示例详解Laravel的注册重构
Aug 14 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
PHP读取大文件的几种方法介绍
Oct 27 #PHP
php array_multisort 对数组进行排序详解及实例代码
Oct 27 #PHP
PHP中的密码加密的解决方案总结
Oct 26 #PHP
php 解析xml 的四种方法详细介绍
Oct 26 #PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 #PHP
php 生成签名及验证签名详解
Oct 26 #PHP
PHP XML和数组互相转换详解
Oct 26 #PHP
You might like
php中的一些数组排序方法分享
2012/07/20 PHP
PHP反射机制用法实例
2014/08/28 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
2016/02/26 PHP
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
2012/04/07 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
jquery获取radio值实例
2014/10/16 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python自动zip压缩目录的方法
2015/06/28 Python
python中正则表达式的使用方法
2018/02/25 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
python虚拟环境迁移方法
2019/01/03 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
Python安装OpenCV的示例代码
2020/03/05 Python
Python实现壁纸下载与轮换
2020/10/19 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
中软国际Java程序员笔试题
2014/07/19 面试题
Delphi笔试题
2016/11/14 面试题
儿科护理实习自我鉴定
2013/09/19 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL