নিয়মিত অভিব্যক্তি
$directory = new RecursiveDirectoryIterator(__DIR__); $flattened = new RecursiveIteratorIterator($directory); // Make sure the path does not contain "/.Trash*" folders and ends eith a .php or .html file $files = new RegexIterator($flattened, '#^(?:[A-Z]:)?(?:/(?!\.Trash)[^/]+)+/[^/]+\.(?:php|html)$#Di'); foreach($files as $file) { echo $file . PHP_EOL; }
ফিল্টার ব্যবহার করা
একটি বেস ক্লাস রেজেক্স ধারণ করে যা ফিল্টারের সাথে ব্যবহার করা প্রয়োজন।
ক্লাস যা এই এক প্রসারিত হবে. RecursiveRegexIterator বর্ধিত হয়।
abstract class FilesystemRegexFilter extends RecursiveRegexIterator { protected $regex; public function __construct(RecursiveIterator $it, $regex) { $this->regex = $regex; parent::__construct($it, $regex); } }
এগুলি মৌলিক ফিল্টার এবং যথাক্রমে ফাইল এবং ডিরেক্টরির নামের সাথে কাজ করে।
class FilenameFilter extends FilesystemRegexFilter { // Filter files with the help of regex public function accept() { return ( ! $this->isFile() || preg_match($this->regex, $this->getFilename())); } } class DirnameFilter extends FilesystemRegexFilter { // Filter directories with the help of regex public function accept() { return ( ! $this->isDir() || preg_match($this->regex, $this->getFilename())); } }
নীচের কোডটি ডিরেক্টরির বিষয়বস্তুর উপর পুনরাবৃত্তিমূলকভাবে পুনরাবৃত্তি করে। ট্র্যাশ ফোল্ডারগুলি ফিল্টার করা হয় এবং শুধুমাত্র PHP এবং HTML ফাইলগুলি রাখা হয়৷
$directory = new RecursiveDirectoryIterator(__DIR__); // Filter out ".Trash*" folders $filter = new DirnameFilter($directory, '/^(?!\.Trash)/'); // Filter PHP/HTML files $filter = new FilenameFilter($filter, '/\.(?:php|html)$/'); foreach(new RecursiveIteratorIterator($filter) as $file) { echo $file . PHP_EOL; }
উপরের কোডটি ব্যবহার করে 2 স্তর পর্যন্ত গভীর স্ক্যান করা হচ্ছে
$files = new RecursiveIteratorIterator($filter); $files->setMaxDepth(1); // Two levels, the parameter is zero-based. foreach($files as $file) { echo $file . PHP_EOL; }