php如何不递归实现遍历目录下所有文件

实现方法:1、创建一个数组,将要遍历的这个目录放入;2、循环处理这个数组,循环结束的条件是数组为空;3、每次循环,处理数组中的一个元素,并将元素删除;4、如果这个元素是目录,则将目录下所有的子元素加入数组,接着处理元素,直至数组为空。

php如何不递归实现遍历目录下所有文件

本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑

如果要遍历某个目录下的所有文件(包括子目录),最首先想到的思路就是用递归:先处理当前目录,再处理当前目录下的子目录。不用递归可不可以呢?以前学数据结构的时候看到过,递归其实是利用堆栈来实现的,递归的特点就是不断的调用自身,最后一次的调用是最先执行完的,倒数第二次调用是其次执行完的,依次类推,最初的调用是最后执行完的。如果理解了递归的原理,其实就可以把所有用递归的实现转化为非递归的实现。

用非递归方式遍历某个目录下的所有文件,思路主要分下面几步:

创建一个数组,将要遍历的这个目录放入;(其实就是创建了一个栈)

循环处理这个数组,循环结束的条件是数组为空;

立即学习“PHP免费学习笔记(深入)”;

每次循环,处理数组中的一个元素,并将元素删除;

如果这个元素是目录,则将目录下所有的子元素加入数组,接着处理元素,直至数组为空。

按照这种思路写出的代码如下:

 0)  {    //弹出数组最后一个元素    $file = array_pop($list);     //处理当前文件    echo $file."";     //如果是目录    if (is_dir($file))    {      $children = scandir($file);      foreach ($children as $child)      {        if ($child !== '.' && $child !== '..')        {          $list[] = $file.'/'.$child;        }      }    }  }}?>

登录后复制

这里我并没有认为递归有多大的缺点,事实上很多情况下,用递归来设计还是非常简洁可读的,至于效率问题,除非在递归深度特别大的时候,才会有影响。

以下是用递归的实现,作为对比:


登录后复制

运行发现,两个函数的结果略有不同,主要表现在打印的顺序上。函数一运行结果的顺序是倒着的,是因为压栈的顺序正好和scandir出来的顺序相反了,可以将第21行改一下:

$children = array_reverse(scandir($file));

登录后复制

推荐学习:《PHP视频教程》

以上就是php如何不递归实现遍历目录下所有文件的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2514099.html

(0)
上一篇 2025年3月5日 15:23:18
下一篇 2025年2月27日 21:33:23

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • php实现301跳转的方法是什么

    php实现301跳转的方法:首先使用“header(“HTTP/1.1 301 Moved Permanently”);”语句设置301状态码;然后使用“header(“Location:your_des…

    2025年3月5日
    200
  • php怎么删除所有文件夹

    php删除所有文件夹的方法:首先创建一个PHP示例文件;然后设置需要删除的文件夹;最后通过遍历一个文件夹内的所有文件和文件夹,并删除所有文件夹和子文件夹下的所有文件即可。 本文操作环境:windows7系统、PHP7.1版,DELL G3电…

    2025年3月5日
    200
  • php怎么替换连续空格

    php替换连续空格的方法:首先创建一个PHP示例文件;然后通过“static public function merge_spaces ( $string){…}”实现替换去除多个连续空格即可。 本文操作环境:windows7系…

    2025年3月5日
    200
  • php浏览器删除cookie

    php浏览器删除cookie的方法:1、设置cookie的过期时间;2、设置cookie的值为空;3、使用setcookie方法来设置cookie。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 php服务器删除浏…

    2025年3月5日
    200
  • php 魔术方法 call是什么

    php __call是php魔术方法中的一个,当程序调用到当前类中未声明或没权限调用的方法时,就会调用__call方法。 本文操作环境:Windows7系统、PHP7.1版,DELL G3电脑 php魔术方法__call         _…

    2025年3月5日
    200
  • linux 虚拟机上怎么安装php

    linux虚拟机上安装php的方法:1、安装依赖包;2、安装libmcrypt;3、通过“wget”下载PHP并使用“tar -zxvf”进行解压安装;4、配置域名;5、分割日志;6、在主机的hosts里,将域名指向虚拟机的IP即可。 本文…

    2025年3月5日
    200
  • php怎么打印数据库错误

    php打印数据库错误的方法:首先创建一个PHP示例文件;然后连接数据库;最后通过“echo mysql_error();”打印数据库错误信息即可。 本文操作环境:Windows7系统、PHP7.1版,DELL G3电脑 PHP打印数据库错误…

    2025年3月5日
    200
  • PHP while循环该如何使用呢?(附详解)

    上篇文章给大家介绍了《关于php数组排序有什么方法呢?》,本文继续给大家介绍php while循环,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 关于PHP 循环,(当遇到繁琐的程序,需要一次一次的运行相同的操作,此时我…

    2025年3月5日 编程技术
    200
  • php如何设置程序运行时间

    设置方法:1、使用“ini_set(“max_execution_time”, “时间数值”);”语句;2、使用“set_time_limit(时间数值)”,如果值设置为0,则可永久执行直到程…

    2025年3月5日
    200
  • php怎么去掉字符串中重复的字母

    php去掉重复字母的方法:首先使用str_split()函数将字符串转换为字符数组;然后使用array_unique()函数移除数组中重复的值;最后使用implode()将处理后的数组转换为字符串即可。 本教程操作环境:windows7系统…

    2025年3月5日
    200

发表回复

登录后才能评论