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
PHP程序61条面向对象分析设计的经验小结
Nov 12 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
PHP Stream_*系列函数
Aug 01 PHP
ThinkPHP视图查询详解
Jun 30 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
PHP判断一个gif图片是否为动态图片的方法
Nov 19 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP支付宝当面付2.0代码
Dec 21 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开发过程中关于继承的使用方法分享
2011/06/17 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
php实现可逆加密的方法
2015/08/11 PHP
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
jquery延迟对象解析
2016/10/26 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
Python测试模块doctest使用解析
2019/08/10 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
python 如何停止一个死循环的线程
2020/11/24 Python
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
加强作风建设心得体会
2014/10/22 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
新员工入职欢迎词
2015/01/23 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server
教你如何用cmd快速登录服务器
2022/06/10 Servers