PHP递归目录的5种方法

<?php
//方法一:使用glob循环

function myscandir1($path, &$arr) {

    foreach (glob($path) as $file) {
        if (is_dir($file)) {
            myscandir1($file . ‘/*‘, $arr);
        } else {

            $arr[] = realpath($file);
        }
    }
}

//方法二:使用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循环
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循环
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循环
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测试运行时间
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";
?>
时间: 2024-11-05 17:40:41

PHP递归目录的5种方法的相关文章

Mac 中显示资源库(Library)文件夹目录的几种方法

Mac 中显示资源库(Library)文件夹目录的几种方法 Mac中Library目录在10.6.7系统之后默认隐藏的,要想找到此文件夹有如下几种方法: 1. 用命令可以使其显示: 在终端中执行命令: chflags nohidden ~/Library 可显示资源库文件夹 如想隐藏,可以在终端中执行命令: chflags hidden ~/Library 隐藏 2. 在Finder菜单中的偏好设置中设置 在Finder菜单中的偏好设置中选择边栏,勾选上设备中的硬盘. 再打开Finder,Fin

15.输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4260432.html  声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换. 题目分析:

C#中得到程序当前工作目录和执行目录的五种方法

string str="";str += "\r\n" + System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;str += "\r\n" + System.Environment.CurrentDirectory;str += "\r\n" + System.IO.Directory.GetCurrentDirectory();str += &

Python遍历目录的4种方法

1.os.popen运行shell列表命令def traverseDirByShell(path):    for f in os.popen('ls ' + path):        print f.strip() 2.利用glob模块 glob.glob(path)返回带目录的文件名.通配符和shell相似.path不能包含shell变量.def traverseDirByGlob(path):    path = os.path.expanduser(path)    for f in

treeview递归绑定的两种方法

方法一: 复制代码代码如下: public void creattree(int fid, TreeNode parentnode)           { DataTable dt = new DataTable();               dt = op.BindGroup();               DataRow[] drs = dt.Select("parentid=" + fid);               foreach (DataRow row in d

python 获取当前文件夹路径及父级目录的几种方法

获取当前文件夹路径及父级目录: import os current_dir = os.path.abspath(os.path.dirname(__file__)) print(current_dir) #F:\project\pritice current_dir1 = os.path.dirname(__file__) print(current_dir1) #F:/project/pritice parent_path = os.path.dirname(current_dir1) pri

iOS 获取文件的目录路径的几种方法 [转]

iOS 获取文件的目录路径的几种方法 2 years ago davidzhang iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory())手动保存的文件在documents文件里 Nsuserdefaults保存的文件在tmp文件夹里 1.Documents 目录:您应该将所有的应用程序数据文件写入到这个目录下.这个目录用于存储用户数据或其它应该

PHP遍历目录四种方法

学习SPL的时候,遇到了DirectoryIterator这个目录类,谢了一下遍历目录的方法.于是总结一下遍历目录的四种写法 如下: <?php /* * 方法一:利用SPL的目录类,这个很简单 */ $obj = new DirectoryIterator('E:\wamp\bin\php\php5.3.3'); foreach ($obj as $file){ echo $file->getFileName(); echo "<br/>"; } /* * 方

反转一个链表的两种方法:递归和循环

下面是反转一个链表的两种方法: 一.循环算法 //反转一个链表,循环算法 LinkList Reverse(LinkList& head) { // if(!head) // return head; //此时不用判断head是否为空,如是空的话返回的也是空 LinkList cur = head; LinkList hou; LinkList beh = 0; while (cur) { hou = cur->next; cur->next = beh; beh = cur; cur