- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在用 PHP 编写磁盘目录应用程序。我的脚本遍历目录,将所有文件名和元数据存储在数据库中。有些目录我不想向下移动。我希望迭代器简单地返回这些目录的名称,就好像它们是文件一样,然后移动到下一个兄弟。我已经实现了一个 RecursiveCallbackFilterIterator,它允许根据匹配的文件名模式省略目录:
$filter = array(".app");
$files = new RecursiveIteratorIterator(
new RecursiveCallbackFilterIterator(
new RecursiveDirectoryIterator(
$zpath,
RecursiveDirectoryIterator::SKIP_DOTS
),
function ($current, $key, $iterator) use ($filter) {
$match = 0;
foreach ($filter as $skip) {
if (substr($current->getBaseName(), -4, 4) == $skip) {
$match = 1;
}
}
if ($match) {
return false;
} else {
return true;
}
}
),
RecursiveIteratorIterator::SELF_FIRST,
RecursiveIteratorIterator::CATCH_GET_CHILD
);
foreach ($files as $splFileInfo) {
$path = $splFileInfo->getRealPath();
echo $path."\n";
}
我的问题是,如何修改这段代码,使与模式匹配的目录包含在结果集中,但不返回给迭代器以供进一步遍历?
到目前为止,我发现的所有 RecursiveCallbackFilterIterator 示例都显示了上述内容的一些变化(例如,省略了某些文件或目录)。我只想返回与模式匹配的目录名称,然后转到下一个同级。
换句话说,我需要把这个:
File1.txt
File2.txt
Folder1/
Folder1/FileA.txt
Folder1/FileB.txt
MyThing.app/
MyThing.app/Contents/
Mything.app/Contents/Manifest.plist
Mything.app/Menu.nib
Portfolio.zip
Zee.txt
进入这个:
File1.txt
File2.txt
Folder1/
Folder1/FileA.txt
Folder1/FileB.txt
MyThing.app
Portfolio.zip
Zee.txt
最佳答案
我创建了一个 eval.in为了测试这个,虽然在这个环境中我无法创建目录,所以我只测试了文件,但也应该与目录一起工作。
file_put_contents("./file2.txt", "test");
file_put_contents("./Zee.txt", "test");
file_put_contents("./fileA.txt", "test");
file_put_contents("./fileB.txt", "test");
file_put_contents("./manifest.plist", "test");
file_put_contents("./manifest.app", "test");
file_put_contents("./MyApp.app", "test");
file_put_contents("./Menu.nib", "test");
$zpath=realpath("./");
$filter = array(".app");
$appFolders =array();
$files = new RecursiveIteratorIterator(
new RecursiveCallbackFilterIterator(
new RecursiveDirectoryIterator(
$zpath,
RecursiveDirectoryIterator::SKIP_DOTS
),
function ($current, $key, $iterator) use ($filter) {
foreach ($filter as $skip) {
preg_match_all("(".$skip.")", $current->getRealPath(), $result);
if (!empty($result[0])) {
$GLOBALS["appFolders"][] =$current->getRealPath();
return false;
}
}
return true;
}
),
RecursiveIteratorIterator::SELF_FIRST,
RecursiveIteratorIterator::CATCH_GET_CHILD
);
echo "\nFiles:\n";
foreach ($files as $splFileInfo) {
$path = $splFileInfo->getRealPath();
echo $path."\n";
}
echo "\nAppFolders:\n";
foreach ($appFolders as $app){
echo $app."\n";
}
输出是:
Files:
/tmp/execpad-4917ea112c86/file2.txt
/tmp/execpad-4917ea112c86/input-4917ea112c86
/tmp/execpad-4917ea112c86/manifest.plist
/tmp/execpad-4917ea112c86/Menu.nib
/tmp/execpad-4917ea112c86/output-4917ea112c86
/tmp/execpad-4917ea112c86/fileA.txt
/tmp/execpad-4917ea112c86/fileB.txt
/tmp/execpad-4917ea112c86/Zee.txt
/tmp/execpad-4917ea112c86/source-4917ea112c86
AppFolders:
/tmp/execpad-4917ea112c86/MyApp.app
/tmp/execpad-4917ea112c86/manifest.app
关于PHP RecursiveDirectoryIterator返回但不遍历匹配 "x"的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44025142/
目前我有下面的代码,什么是我能够在下面的代码中设置标志以便我可以使用 ::SKIP_DOTS 的最佳方式? 代码: $folder = 'images/banner_img';?>
我目前有以下 PHP: $directoryIterator = new RecursiveDirectoryIterator( __DIR__ . '/tests/phpunit/' ); /**
我正在尝试使用 PHP 的 RecursiveDirectoryIterator 来列出一组目录。我遇到的问题是它似乎正在跳过它命中的任何空目录。任何想法如何让它列出空目录? 这是我正在使用的代码片段
现在默认按字母显示,我不希望那样。我想在顶部使用 RecursiveDirectoryIterator 最新文件对文件进行排序。按降序排列。 同时使用 if 条件比较日期并从该日期获取文件 =
我正在尝试用 PHP 编写代码以列出目录和子目录中的所有文件及其位置,为此我正在使用 RecursiveDirectoryIterator 类。但是当我 print_r 我的数组时,结果如下: Arr
我有一个具有这种结构的目录: 主要/ |- 图片/ |-- file1.jpg |-- file2.jpg |-- file3.jpg |- 文件/ |-- 私有(private)/ |--- bla
因此,在我学习 Java 编程书籍的过程中,为了进一步了解 Android 开发,我遇到了 JSONObject 和 JSONArray。经过一些研究后,我整理了一个 php 脚本来读取目标目录的内容
我有一个这样的递归目录迭代器: $theme_iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator(
我想获取所有子目录的列表并且我的以下代码有效,除非我对某些文件夹具有只读权限。 在下面的问题中,它显示了如何使用 RecursiveDirectoryIterator 跳过目录 Can I make
我正在尝试读取我们服务器上的所有文件(>2M 文件)并使用 this example 取得了很大进展。 , 以使用 Regex 将其过滤为仅 PHP 和 HTML 文件。我的日子一直在尝试使用此 PH
我正在使用 RecursiveDirectoryIterator 和 RecursiveIteratorIterator 使用如下代码构建文件列表树。我需要对列表进行排序 - 目录然后按字母顺序排列文
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(".")) as $file) { echo "$file
我正在使用 PharData 创建一个 tar 包。它工作正常,但它包含一个我不想要的文件夹。如何排除存档中的文件夹? buildFromIterator($iterator, $dir); $pha
我一直在尝试在我的 windows7 64 位机器上使用 composer 更新/安装。但最近我收到了这个错误: $ php composer.phar install Loading compose
这是我的 php 脚本: $object){ echo $objects->getDepth() . " " . $object->getFilename() . ""; } ?
以下代码: $zip = new ZipArchive(); if ($zip->open('./archive.zip', ZIPARCHIVE::CREATE) !== TRUE) { d
我是一名优秀的程序员,十分优秀!