php获取目录过滤,php – RegexIterator过滤图像,忽略特定目录

::解::

使用@RomanPerekhrest回答略有修改,我有我需要的东西.这会添加多个目录以递归搜索,同时过滤掉某些文件夹(在我的情况下:“_ _thumbs”文件夹).最终代码如下:

$dir1 = new RecursiveDirectoryIterator("./folder01");

$dir2 = new RecursiveDirectoryIterator("./folder02");

$dir3 = new RecursiveDirectoryIterator("./folder03");

$iterators = new AppendIterator();

$filter = function ($file, $key, $iterator) {

if ($iterator->hasChildren() && $file->getFilename() != "_thumbs") {

return true;

}

return $file->isFile();

};

$iterators->append(new RecursiveIteratorIterator( $dir1 ));

$iterators->append( $dir2 );

$iterators->append(new RecursiveIteratorIterator(new RecursiveCallbackFilterIterator($dir3, $filter)));

$rgIt = new RegexIterator($iterators, "/^.+\.jpg$/i");

$files = iterator_to_array($rgIt);

::原始问题::

我很难搞清楚RegexIterator.我正在尝试过滤掉RecursiveIteratorIterator扫描的父目录中的目录.在我的下面的代码中,$dir3有多个目录,因此RecursiveIteratorIterator,但它也有一个“_thumbs”目录,我不希望它处理. RegexIterator目前正在过滤并保留.jpg图像,但我还要杀死从“_thumbs”目录中获取的任何内容.

$dir1 = new RecursiveDirectoryIterator("./folder01");

$dir2 = new RecursiveDirectoryIterator("./folder02");

$dir3 = new RecursiveDirectoryIterator("./folder03"); // <<< this dir has a _thumbs directory that I don't want to process

$iterators = new AppendIterator();

$iterators->append(new RecursiveIteratorIterator( $dir1 ));

$iterators->append( $dir2 );

$iterators->append(new RecursiveIteratorIterator( $dir3 ));

$rgIt = new RegexIterator($iterators, "/^.+\.jpg$/i"); //<<< this filters and keeps .jpg images. I don't fully understand the syntax though

$files = iterator_to_array($rgIt);

usort($files, function($a, $b){

if(filectime($a) == filectime($b)){

return 0;

}

return filectime($a) > filectime($b) ? -1 : 1;

});

$files = array_slice($files, 0 , 18);

:: EDIT01 ::

这是我试过的另一个测试,但也没有随处可见.尝试使用RecursiveFilterIterator,但我怀疑我是否正确使用它.我得到的错误说“传递给RecursiveFilterIterator :: __ construct()的参数1必须实现接口RecursiveIterator,给出的AppendIterator实例”.

$dir1 = new RecursiveDirectoryIterator("./folder01");

$dir2 = new RecursiveDirectoryIterator("./folder02");

$dir3 = new RecursiveDirectoryIterator("./folder03");

$iterators = new AppendIterator();

$iterators->append(new RecursiveIteratorIterator( $dir1 ));

$iterators->append( $dir2 );

$iterators->append(new RecursiveIteratorIterator( $dir3 ));

class DirFilter extends RecursiveFilterIterator{

public function accept(){

$excludes = "/_thumbs";

return !(in_array($this->getFilename(), $excludes));

}

}

$filterItr = new DirFilter($iterators);

$rgIt = new RegexIterator($filterItr, "/^.+\.jpg$/i");

$files = iterator_to_array($rgIt);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值