Ratings | | Unique User Downloads | | Download Rankings |
Not enough user ratings | | Total: 92 | | All time: 9,921 This week: 455 |
|
Description | | Author |
This package provides an interface to sort and filter directory entries.
It implements the recursive iterator interface to traverse directories recursively and sort the directory entries.
The interface takes a callback function that can filter files and directories according to custom rules. | |
|
|
Innovation award
Nominee: 2x
Winner: 1x |
|
Example
<?php
function gAutoLoader($class) {
$class = str_replace('\\', DIRECTORY_SEPARATOR, $class);
if (is_readable($class . '.php')) {
include_once $class . '.php';
return true;
}
return false;
}
spl_autoload_register('gAutoLoader');
$path = realpath(__DIR__.'/../g-backup-2/test-dir/source/backup5');
$directoryIncludes = []; //All include
$directoryExcludes = ['~y~']; //contains "y" char
$fileIncludes = ['~\.php$~']; //extension need to be ".php'
$fileExcludes = ['~temp~']; //File name or path contains the string "temp"
$directorySelector = new \directoryWalker\selector($directoryIncludes, $directoryExcludes);
$fileSelector = new \directoryWalker\selector($fileIncludes, $fileExcludes);
$sortFunction = function($value) { return ($value->isDir() ? '2#' : '1#').$value->getPathName(); };
$filterFunction = function ($current, $key, $iterator) {
global $directorySelector, $fileSelector;
if ($current->isDir()) {
return $directorySelector->isGood($current->getPathName());
}
else {
return $fileSelector->isGood($current->getPathname());
}
};
$directory = new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS);
$sorted = new \directoryWalker\RecursiveSortingIterator($directory, $sortFunction );
$filtered = new \RecursiveCallbackFilterIterator($sorted, $filterFunction);
$tit = new RecursiveTreeIterator($filtered);
foreach( $tit as $key => $value ){
echo $value . PHP_EOL;
}
|
Details
directoryWalker
Sort RecursiveDirectoryIterator elements level-by-level
Sorts the entries in the current subdirectory (based on custom defined criteria) and stores the entries desired->current position pairs.
Because RecursiveDirectoryIterator is seekable this class can seek through the entries in the desired order.
Minimal memory and performance overhead
Filtering uses include+exclude rulesets with regexp or bogus glob patterns
This is a simple matcher that can filter elements using include and exclude rulesets.
An elemnt is matched if it matches any include rule, as long as it does not match an exclude rule.
Rules are simple regexp patterns or glob like patterns that converts to regexp patterns.
This class joins up the include rules into one regexp and the exclude rules into an another regexp to improve the matching performance.
|
Applications that use this package |
|
No pages of applications that use this class were specified.
If you know an application of this package, send a message to the author to add a link here.