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入门速成教程
Mar 19 PHP
快速配置PHPMyAdmin方法
Jun 05 PHP
PHP 超链接 抓取实现代码
Jun 29 PHP
php程序之die调试法 快速解决错误
Sep 17 PHP
第六章 php目录与文件操作
Dec 30 PHP
PHP中数据库单例模式的实现代码分享
Aug 21 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
Windows7下的php环境配置教程
Feb 28 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
PHP实现图片批量打包下载功能
Mar 01 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
laravel 出现command not found问题的解决方案
Oct 23 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(7) php 字符串相关应用
2010/03/05 PHP
定义php常量的详解
2013/06/09 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
Yii基于数组和对象的Model查询技巧实例详解
2015/12/28 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
解决vue单页路由跳转后scrollTop的问题
2018/09/03 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
营业员演讲稿
2013/12/30 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技