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 相关文章推荐
详解:――如何将图片储存在数据库里
Dec 05 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
Jul 28 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
Feb 04 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
Jul 03 PHP
PHP使用Nginx实现反向代理
Sep 20 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
微信推送功能实现方式图文详解
Jul 12 PHP
PHP7移除的扩展和SAPI
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为SHOPEX增加日志功能代码
2010/07/02 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
2017/02/17 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
JavaScript库 开发规则
2009/01/31 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
js日期联动示例
2014/05/02 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
用于业余项目的8个优秀Python库
2018/09/21 Python
python使用Matplotlib画条形图
2020/03/25 Python
使用Python处理BAM的方法
2018/09/28 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
Python匿名函数及应用示例
2019/04/09 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
导游个人求职信范文
2014/03/23 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
优秀教师推荐材料
2014/12/16 职场文书
公司联欢会主持词
2015/07/04 职场文书
遗嘱范文
2015/08/07 职场文书
基督教追悼会答谢词
2015/09/29 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技