Maison > Article > développement back-end > En quoi RecursiveIteratorIterator diffère-t-il de IteratorIterator pour parcourir les structures arborescentes en PHP ?
Comprendre RecursiveIteratorIterator
RecursiveIteratorIterator est un itérateur spécialisé en PHP qui permet de parcourir des objets conteneurs implémentant l'interface RecursiveIterator. Cela permet de parcourir tous les nœuds dans une structure arborescente ordonnée.
Différence avec IteratorIterator
IteratorIterator, un itérateur concret, prend en charge le parcours linéaire des objets. En revanche, RecursiveIteratorIterator nécessite un RecursiveIterator, permettant de parcourir une arborescence.
Parcours d'une structure arborescente
RecursiveIteratorIterator explore de manière récursive tous les nœuds enfants (le cas échéant) d'un nœud. Il utilise une pile pour garder une trace des sous-itérateurs actuels pour chaque niveau de parcours. Cela permet de visiter tous les nœuds d'un arbre, quelle que soit leur profondeur.
Méta-informations et modes
Contrairement à IteratorIterator, RecursiveIteratorIterator donne accès aux méta-informations de l'itérateur. Cela inclut la profondeur du nœud actuel, qui peut être utilisée à des fins d'indentation ou à d'autres fins. De plus, il prend en charge différents modes de traversée, tels que SELF_FIRST, qui donne la priorité aux répertoires par rapport aux fichiers, ou LEAVES_ONLY, qui répertorie uniquement les fichiers.
Exemple : Liste des répertoires
Pour parcourir une arborescence de répertoires à l'aide de RecursiveIteratorIterator :
$dir = new RecursiveTreeIterator( new RecursiveDirectoryIterator( $path, RecursiveDirectoryIterator::SKIP_DOTS ), RecursiveIteratorIterator::SELF_FIRST );
Cela parcourra tous les répertoires et fichiers de $path et affichera une liste en retrait, avec les répertoires répertoriés en premier.
Exercice de bricolage : Amélioration de RecursiveTreeIterator
Créez une classe de décorateur qui fournit le nom de base des fichiers au lieu du chemin complet et utilisez-la avec RecursiveTreeIterator :
$lines = new RecursiveTreeIterator( new DiyRecursiveDecorator($dir) );
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!