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 相关文章推荐
MySQL中create table语句的基本语法是
Jan 15 PHP
用php实现让页面只能被百度gogole蜘蛛访问的方法
Dec 29 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
解析php中获取url与物理路径的总结
Jun 21 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
php中get_meta_tags()、CURL与user-agent用法分析
Dec 16 PHP
Laravel中使用阿里云OSS Composer包分享
Feb 10 PHP
php中的常用魔术方法汇总
Feb 14 PHP
php实现的一段简单概率相关代码
May 30 PHP
[原创]php简单防盗链验证实现方法
Jul 09 PHP
php fread读取文件注意事项
Sep 24 PHP
thinkPHP5.0框架命名空间详解
Mar 18 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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
浅谈PHP的反射API
2017/02/26 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
13个PHP函数超实用
2015/10/21 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
python登录QQ邮箱发信的实现代码
2013/02/10 Python
python批量修改文件后缀示例代码分享
2013/12/24 Python
python的三目运算符和not in运算符使用示例
2014/03/03 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
护理中职生求职信范文
2014/02/24 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
罗马假日观后感
2015/06/08 职场文书
丧事主持词
2015/07/02 职场文书
初中语文教学随笔
2015/08/15 职场文书