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 相关文章推荐
我的论坛源代码(一)
Oct 09 PHP
Cakephp 执行主要流程
Mar 24 PHP
php批量上传的实现代码
Jun 09 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
PHP获取QQ达人QQ信息的方法
Mar 05 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
php判断是否为ajax请求的方法
Nov 29 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
PHP7 参数处理机制修改
Mar 09 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一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
php密码生成类实例
2014/09/24 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
javascript编程起步(第六课)
2007/01/10 Javascript
JS实现self的resend
2010/07/22 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
用原生js做单页应用
2017/01/17 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
vue基础之事件v-onclick=&quot;函数&quot;用法示例
2019/03/11 Javascript
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
Django中处理出错页面的方法
2015/07/15 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
三八红旗集体先进事迹材料
2014/05/22 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
大学生个人总结范文
2015/02/15 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
社区安全温馨提示语
2015/07/14 职场文书
2015年治庸问责工作总结
2015/07/27 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
mysql创建存储过程及函数详解
2021/12/04 MySQL
一文搞懂Java中的注解和反射
2022/06/21 Java/Android