Schauen wir uns ohne weitere Umschweife einfach den Code an:
$path = $argv[1]; // 获取目录下所有内容 $dirs = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); foreach($dirs as $k=>$d){ echo 'key:'. $k, PHP_EOL; if($d->isDir()){ echo $d->getPathname(), PHP_EOL; }else{ echo $d->getFilename(), PHP_EOL; } } //执行 php PHP获取目录中的全部内容RecursiveDirectoryIterator.php ../ // key:../. // ../. // key:../.. // ../.. // key:../source // ../source // key:../source/. // ../source/. // key:../source/.. // ../source/.. // key:../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php // PHP获取目录中的全部内容RecursiveDirectoryIterator.php // key:../source/PHP大文件读取操作.php // PHP大文件读取操作.php // key:../PHP大文件读取操作.md // PHP大文件读取操作.md // key:../PHP获取目录中的全部内容RecursiveDirectoryIterator.md // PHP获取目录中的全部内容RecursiveDirectoryIterator.md
Es ist eigentlich nur eine Codezeile, die dann direkt in einer Schleife ausgeführt wird, um den Iterator auszugeben. Aus den Ergebnissen können wir ersehen, dass wir zuerst das Quellverzeichnis eingeben, dann den Inhalt der externen Datei durchlaufen und alle Inhalte im Verzeichnis in der Reihenfolge des Verzeichnisses und des Dateinamens erhalten. Ist das nicht viel praktischer, als die rekursive Funktion selbst zu schreiben?
Was wäre, wenn wir alle PHP-Dateien im Verzeichnis abrufen und ihre Gesamtdateigröße berechnen möchten? Mit diesem Satz von Iteratoroperationen können wir auch ganz einfach einen regulären Iterator hinzufügen, um den Inhalt des vorherigen Iterators zu filtern:
// 获取所有php文件 $regIts = new RegexIterator($dirs, '/^.+\.php$/i'); $fileSize = 0; foreach($regIts as $k=>$p){ echo $p->getSize() . ' ' . $k, PHP_EOL; $fileSize += $p->getSize(); } echo 'Total ', $fileSize, PHP_EOL; // 622 ../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php // 869 ../source/PHP大文件读取操作.php // Total 1491
Es fühlt sich an wie ls -l, was bequem sein kann . Die Verwendung dieser Klasse wird hier kurz vorgestellt. Es gibt viele Funktionen in der SPL-Bibliothek, die es wert sind, dass wir sie erkunden. Lernen Sie langsam und üben Sie langsam, um unsere Fähigkeiten zur eleganten Programmierung kontinuierlich zu verbessern.
Testcode:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/PHP%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%85%A8%E9%83%A8%E5%86%85%E5%AE%B9RecursiveDirectoryIterator.php
Empfohlenes Lernen: php-Video-Tutorial