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连接access数据库
Mar 27 PHP
从php核心代码分析require和include的区别
Jan 02 PHP
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
Mar 19 PHP
PHP学习笔记 (1) 环境配置与代码调试
Jun 19 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
May 23 PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
May 31 PHP
yii2多图上传组件的使用教程
May 10 PHP
PHP PDOStatement::bindParam讲解
Jan 30 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
如何运行/调试你的PHP代码
Oct 23 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
php中如何执行linux命令详解
2018/11/06 PHP
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
Python中Class类用法实例分析
2015/11/12 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
python os.rename实例用法详解
2020/12/06 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
公司年会演讲稿范文
2014/01/11 职场文书
学生喝酒检讨书
2014/02/06 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
签字仪式主持词
2015/07/03 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
mysql函数全面总结
2021/11/11 MySQL
html中两种获取标签内的值的方法
2022/06/16 jQuery