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 相关文章推荐
5.PHP的其他功能
Oct 09 PHP
PHP UTF8编码内的繁简转换类
Jul 20 PHP
php强制下载类型的实现代码
Apr 21 PHP
PHP中使用unset销毁变量并内存释放问题
Jul 05 PHP
php不使用copy()函数复制文件的方法
Mar 13 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
May 13 PHP
PHP正则验证Email的方法
Jun 15 PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
分享PHP-pcntl 实现多进程代码
Sep 30 PHP
php版阿里云OSS图片上传类详解
Dec 01 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
Oct 08 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
Laravel 5框架学习之环境与配置
2015/04/08 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
浅析return false的正确使用
2013/11/04 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
js密码强度检测
2016/01/07 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
常见python正则用法的简单实例
2016/06/21 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
利用Python将图片中扭曲矩形的复原
2020/09/07 Python
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
小学新教师培训方案
2014/02/03 职场文书
网站客服岗位职责
2014/04/05 职场文书
求职自荐信的格式
2014/04/07 职场文书
学生鉴定评语大全
2014/05/05 职场文书
创业计划书之物流运送
2019/09/17 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技