- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 RecursiveDirectoryIterator
和 RecursiveIteratorIterator
使用如下代码构建文件列表树。我需要对列表进行排序 - 目录然后按字母顺序排列文件,或者仅按字母顺序排列。
谁能告诉我如何对文件列表进行排序?
$dir_iterator = new RecursiveDirectoryIterator($groupDirectory);
$iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file) {
// do stuff with $file
}
最佳答案
有多个选项可用,您可以使用它们以一种或另一种方式对迭代器进行排序。最佳选择在很大程度上取决于您想要如何操作迭代器内容、您想从迭代器中获得什么以及您真正想要/需要多少迭代器。
方法会有所不同;利用 SplHeap
(或 Min
、Max
品种)、SplPriorityQueue
(可能用于文件大小之类的东西) ) 或者只是将迭代器包装在类似 ArrayObject
的东西中,它可以对自己的内容进行排序。
我将使用 SplHeap
作为示例。由于您想按字母顺序排列 RecursiveDirectoryIterator
的全部内容,因此可以使用如下内容:
class ExampleSortedIterator extends SplHeap
{
public function __construct(Iterator $iterator)
{
foreach ($iterator as $item) {
$this->insert($item);
}
}
public function compare($b,$a)
{
return strcmp($a->getRealpath(), $b->getRealpath());
}
}
$dit = new RecursiveDirectoryIterator("./path/to/files");
$rit = new RecursiveIteratorIterator($dit);
$sit = new ExampleSortedIterator($rit);
foreach ($sit as $file) {
echo $file->getPathname() . PHP_EOL;
}
排序顺序是字母顺序,混合文件和文件夹:
./apple
./apple/alpha.txt
./apple/bravo.txt
./apple/charlie.txt
./artichoke.txt
./banana
./banana/aardvark.txt
./banana/bat.txt
./banana/cat.txt
./beans.txt
./carrot.txt
./cherry
./cherry/amy.txt
./cherry/brian.txt
./cherry/charlie.txt
./damson
./damson/xray.txt
./damson/yacht.txt
./damson/zebra.txt
./duck.txt
关于php - 使用 RecursiveDirectoryIterator 对目录列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2930405/
目前我有下面的代码,什么是我能够在下面的代码中设置标志以便我可以使用 ::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
我是一名优秀的程序员,十分优秀!