php7:递归式目录迭代器

PHP7中提供了一个关键的递归式目录迭代器RecursiveDirectoryIterator。使用该迭代器可以递归式遍历指定路径下的所有文件。
先看一下该迭代器的构造器:

public RecursiveDirectoryIterator::__construct
    ( string $path[, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO] )

该构造器的核心就是$path,即遍历的基路径。第二个参数flag会影响某些方法的行为。
下面给出例子:

递归式遍历目录下的指定文件

首先说一下最终想得到的效果:按照linux和windows显示文件路径的命令ls和dir,我们可以调用类中的ls和dir命令来遍历文件。

$class->ls("*.php"):查找后缀为*.php的文件并以Linux中的形式展示
$class->dir("*.php"):以windows中的形式展示

这里又有一些问题,RecursiveDirectoryIterator通过foreach遍历得到的是多维数组,比较麻烦无法直接输出;对得到的文件如何进行过滤?

这就引入了另外两个迭代器RecursiveIteratorIterator和RegexIterator:

  • RecursiveIteratorIterator:深层次迭代器,通过迭代器作为参数传入构造器,在foreach遍历时可以直接得到指定对象SplFileObject
public RecursiveIteratorIterator::__construct
  ( Traversable $iterator[, int $mode=RecursiveIteratorIterator::LEAVES_ONLY[, int $flags = 0]] )
  • RegexIterator:构造器中具有两个参数,迭代器和正则表达式字符串,可以过滤指定元素。
public RegexIterator::__construct
    ( Iterator $iterator, string $regex[, int $mode = self::MATCH[,int $flags = 0[, int $preg_flags = 0]]] )
  • SplFileObject对象:可以得到文件的各种信息
foreach($recursiveDirectoryIterair as $key =>$value);
//$key为得到文件的完整路径,$value为SplFileObject对象

思路:将RecursiveDirectoryIterator作为参数传入RecursiveIteratorIterator,将RecursiveIteratorIterator作为参数传入RegexIterator,最后遍历得到SplFileObject对象,获取信息输出即可。

代码
类文件:


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值