Sans plus tarder, regardons simplement le code :
$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
En fait, ce n'est qu'une ligne de code, puis une boucle directe pour sortir l'itérateur. D'après les résultats, nous pouvons voir qu'il faut d'abord entrer dans le répertoire source, puis parcourir le contenu du fichier externe et obtenir tout le contenu du répertoire dans l'ordre du répertoire et du nom de fichier. N'est-ce pas beaucoup plus pratique que d'écrire nous-mêmes la fonction récursive ?
Et si nous voulons obtenir tous les fichiers PHP du répertoire et calculer leur taille totale de fichier ? L'utilisation de cet ensemble d'opérations d'itérateur peut également être effectuée très simplement. Il nous suffit d'ajouter un itérateur régulier pour filtrer le contenu de l'itérateur précédent :
// 获取所有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
Cela ressemble à ls -l Cela peut facilement nous permettre de le faire. effectuer les opérations associées dans le répertoire. L'utilisation de cette classe est brièvement présentée ici. Il existe de nombreuses fonctionnalités dans la bibliothèque SPL qui méritent notre exploration. Apprenez lentement et pratiquez lentement pour améliorer continuellement notre capacité de programmation élégante.
Code de test :
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
Apprentissage recommandé : Tutoriel vidéo php