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循环获取GET和POST值的代码
Apr 09 PHP
php curl 伪造IP来源的实例代码
Nov 01 PHP
PHP基础知识介绍
Sep 17 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
php fsockopen解决办法 php实现多线程
Jan 20 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
Mar 19 PHP
PHP中Closure类的使用方法及详解
Oct 09 PHP
php for 循环使用的简单实例
Jun 02 PHP
php中array_column函数简单实现方法
Jul 11 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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+MYSQL 出现乱码的解决方法
2008/08/08 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
php mail to 配置详解
2014/01/16 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
微信开发 js实现tabs选项卡效果
2016/10/28 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
大专毕业生自我鉴定
2013/11/21 职场文书
班组长安全职责
2014/01/05 职场文书
五好党支部事迹材料
2014/02/06 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
公证书样本
2014/04/10 职场文书
教师业务培训方案
2014/05/01 职场文书
积极向上的团队口号
2014/06/06 职场文书
闪闪的红星观后感
2015/06/08 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
Hive HQL支持2种查询语句风格
2022/06/25 数据库