早速、コードを直接見てみましょう。
$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
これは実際には 1 行のコードで、直接ループしてイテレータを出力します。結果から、最初にソース ディレクトリに入り、次に外部ファイルの内容を走査し、ディレクトリ内のすべての内容をディレクトリとファイル名の順序で取得していることがわかります。自分で再帰関数を書くよりもはるかに便利ではないでしょうか?
ディレクトリ内のすべての PHP ファイルを取得し、それらの合計ファイル サイズを計算したい場合はどうすればよいでしょうか?この一連のイテレータ操作を使用することも非常に簡単に完了できます。前のイテレータの内容をフィルタリングするために通常のイテレータを追加するだけです:
// 获取所有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
これは ls -l と同じように感じられます。ディレクトリの下で関連する操作を実行します。このクラスの使用法をここで簡単に紹介します。SPL ライブラリには、探索する価値のある機能が多数あります。ゆっくりと学習し、ゆっくりと練習して、エレガントなプログラミングの能力を継続的に向上させてください。
テスト コード:
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
推奨学習: php ビデオ チュートリアル