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的一些小问题
Jul 03 PHP
PHP session有效期session.gc_maxlifetime
Apr 20 PHP
PHP抽象类 介绍
Jun 13 PHP
php的数组与字符串的转换函数整理汇总
Jul 18 PHP
php读取图片内容并输出到浏览器的实现代码
Aug 08 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
使用array_map简单搞定PHP删除文件、删除目录
Oct 29 PHP
调试PHP程序的多种方法介绍
Nov 06 PHP
ThinkPHP框架安全实现分析
Mar 14 PHP
ThinkPHP路由机制简介
Mar 23 PHP
Yii2 GridView实现列表页直接修改数据的方法
May 16 PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 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实现快速排序的三种方法分享
2014/03/12 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
javascript 日期常用的方法
2009/11/11 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
JS实现小米轮播图
2020/09/21 Javascript
Django框架多表查询实例分析
2018/07/04 Python
python 以16进制打印输出的方法
2018/07/09 Python
django之自定义软删除Model的方法
2019/08/14 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
python实现在线翻译
2020/06/18 Python
Python 虚拟环境工作原理解析
2020/12/24 Python
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
会计试用期自我评价
2014/09/19 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
nginx 配置指令之location使用详解
2022/05/25 Servers