深圳市一览网络股份有限
公司
ShenZhen Elanw Network
Co.,Ltd.
地址:南山科技园南区数字技术园
B2 栋 4A
Add: Room A,4th Floor,Block
B2,Digi-Tech Park ,
电话(Tel):0755-86133725
传真(Fax):0755-22632616
网址
(Web):www.YL1001.com
有你需要的对应数据类型的迭代器。
有个非常好的案例就是遍历目录。常规的做法就是使用
scandir ,然后跳过「.「 和 「..」,以及其它未满足条
件的文件。例如你需要遍历个某个目录抽取其中的图片文件,就需要判断是否是
jpg、gif 结尾。
下面的代码就是使用
SPL 的迭代器执行上述递归寻找指定目录中的图片文件的例子:
复制代码
代码如下:
<?php
class
RecursiveFileFilterIterator
extends
FilterIterator {
// 满足条件的扩展名
protected
$ext
=
array
('jpg','gif');
/**
* 提供 $path 并生成对应的目录迭代器
*/
public
function
__construct(
$path
) {
parent::__construct(
new
RecursiveIteratorIterator(
new
RecursiveDirectoryIterator(
$path
)));
}
/**
* 检查文件扩展名是否满足条件
*/
public
function
accept() {
$item
=
$this
->getInnerIterator();
if
(
$item
->isFile() &&
in_array(
pathinfo
(
$item
->getFilename(), PATHINFO_EXTENSION),
$this
->ext)) {
return
TRUE;
}
}
}
// 实例化
foreach
(
new
RecursiveFileFilterIterator('/path/to/something')
as
$item
) {
echo
$item
. PHP_EOL;
}
?>
你可能会说,这不是花了更多的代码去办同一件事情吗?那么,查看上面的代码,你不是拥有了具有高
度重用而且可以测试的代码了吗
:)