网站首页 > 基础教程 正文
这次我们来介绍一个SPL库中的目录迭代器,它的作用其实非常简单,从名字就可以看出来,就是获取指定目录下的所有内容。之前我们要遍历目录获取目录及目录下的所有文件一般是需要进行递归遍历的,自己写这个代码说实话还是挺麻烦的,所以PHP为我们准备好了这一套内置API,当输入指定的目录后,直接返回该目录下所有子目录及文件内容。当然,并不是树型的,顺序并不一定,想要组织成树型还需要我们自己再进行处理。
话不多说,直接看代码:
$path = $argv[1];
// 获取目录下所有内容
$dirs = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
foreach($dirs as $k=>$d){
echo 'key:'. $k, PHP_EOL;
if($d->isDir()){
echo $d->getPathname(), PHP_EOL;
}else{
echo $d->getFilename(), PHP_EOL;
}
}
//执行 php PHP获取目录中的全部内容RecursiveDirectoryIterator.php ../
// key:../.
// ../.
// key:../..
// ../..
// key:../source
// ../source
// key:../source/.
// ../source/.
// key:../source/..
// ../source/..
// key:../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php
// PHP获取目录中的全部内容RecursiveDirectoryIterator.php
// key:../source/PHP大文件读取操作.php
// PHP大文件读取操作.php
// key:../PHP大文件读取操作.md
// PHP大文件读取操作.md
// key:../PHP获取目录中的全部内容RecursiveDirectoryIterator.md
// PHP获取目录中的全部内容RecursiveDirectoryIterator.md
其实就一行代码,然后直接循环输出这个迭代器。从结果中我们可以看出,先进入 source 目录遍历完成后再遍历外部的文件内容,按照目录、文件名的顺序依次获取了目录下的所有内容。是不是比我们自己写递归函数要方便很多。
如果我们想获取目录下的所有PHP文件,并且计算他们的文件总大小呢?使用这一套迭代器操作也可以非常简单的完成,我们只需要增加一个正则迭代器对前面的迭代器内容进行一下过滤就好了:
// 获取所有php文件
$regIts = new RegexIterator($dirs, '/^.+\.php$/i');
$fileSize = 0;
foreach($regIts as $k=>$p){
echo $p->getSize() . ' ' . $k, PHP_EOL;
$fileSize += $p->getSize();
}
echo 'Total ', $fileSize, PHP_EOL;
// 622 ../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php
// 869 ../source/PHP大文件读取操作.php
// Total 1491
感觉就和 ls -l 一样,可以方便的让我们能够进行目录下的相关操作。这个类的使用就简单的介绍到这里,关于SPL库中还有许多值得我们探索的能力,慢慢学习慢慢实践,不断提升我们面向优雅编程的能力。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/PHP%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%85%A8%E9%83%A8%E5%86%85%E5%AE%B9RecursiveDirectoryIterator.php
参考文档: 《PHP7编程实战》
https://www.php.net/manual/en/class.recursivedirectoryiterator.php
https://www.php.net/manual/en/class.splfileinfo.php
猜你喜欢
- 2024-10-12 六种流行语言(C、C++、Python、JavaScript、PHP、Java)对比
- 2024-10-12 「讨论」php与Python之间有何区别?Python和php之间的简单比较
- 2024-10-12 重蔚自留地php学习第三十天——php数组
- 2024-10-12 脚把脚教你消息队列,典型的应用场景到底有哪些?
- 2024-10-12 php-生成器(yield) php生成html
- 2024-10-12 PHP——数组根据某一键值合并 php 数组 合并
- 2024-10-12 php 一步步实现mvc架构——view篇
- 2024-10-12 PHP函数shuffle()取数组若干个随机元素的方法及实例分析
- 2024-10-12 WordPress 主循环和全局变量 wordpress主题
- 2024-10-12 js里面能写php吗 js能写app吗
- 最近发表
- 标签列表
-
- 菜鸟教程 (58)
- jsp (69)
- c++教程 (58)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)