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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
用PHP与XML联手进行网站编程代码实例
Jul 10 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
PHP对象转换为数组函数(递归方法)
Feb 04 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
Jun 09 PHP
PHP常用正则表达式集锦
Aug 17 PHP
详谈PHP编码转换问题
Jul 28 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
May 20 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
Laravel框架路由设置与使用示例
Jun 12 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
神族 PROTOSS 概述
2020/03/14 星际争霸
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
PHP Undefined index报错的修复方法
2011/07/17 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
浅谈Node.js:理解stream
2016/12/08 Javascript
javascript 网页进度条简单实例
2017/02/22 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
JS window对象简单操作完整示例
2020/01/14 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
python模拟事件触发机制详解
2018/01/19 Python
django创建简单的页面响应实例教程
2019/09/06 Python
Django框架安装方法图文详解
2019/11/04 Python
python数据爬下来保存的位置
2020/02/17 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
《母亲的恩情》教学反思
2014/02/13 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
北京导游词
2015/02/12 职场文书
投标单位介绍信
2015/05/05 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL
MySQL transaction事务安全示例讲解
2022/06/21 MySQL