La classe RecursiveCallbackFilterIterator
(PHP 5 >= 5.4.0)
Introduction
Synopsis de la classe
RecursiveCallbackFilterIterator
extends
CallbackFilterIterator
implements
OuterIterator
,
RecursiveIterator
{
/* Méthodes */
/* Méthodes héritées */
}Exemples
La fonction de rappel doit accepter jusqu'à 3 arguments : l'élément courant, la clé courante, et l'itérateur courant, respectivement.
Exemple #1 Arguments disponibles pour la fonction de rappel
<?php /** * Fonction de rappel pour RecursiveCallbackFilterIterator * * @param $current La valeur de l'élément courant * @param $key La clé de l'élément courant * @param $iterator Itérateur à filtrer * @return boolean TRUE pour accepter l'élément courant, FASLE sinon */ function my_callback($current, $key, $iterator) { // Votre filtre ici } ?>
Le filtrage d'un itérateur récursif implique généralement 2 conditions.
La première est que, pour autoriser la récursion, la fonction
de rappel doit retourner TRUE
si l'élément de l'itérateur courant
a un fils. La seconde est une condition de filtrage normale, comme
la vérification de la taille de fichier ou la vérification de l'extension
comme dans l'exemple suivant.
Exemple #2 Exemple simple d'une fonction de rappel récursive
<?php $dir = new RecursiveDirectoryIterator(__DIR__); // Filtrage des gros fichiers ( > 100MB) $files = new RecursiveCallbackFilterIterator($dir, function ($current, $key, $iterator) { // Permet la récursion if ($iterator->hasChildren()) { return TRUE; } // Vérifie les gros fichiers if ($current->isFile() && $current->getSize() > 104857600) { return TRUE; } return FALSE; }); foreach (new RecursiveIteratorIterator($files) as $file) { echo $file->getPathname() . PHP_EOL; } ?>
Sommaire
- RecursiveCallbackFilterIterator::__construct — Crée un objet RecursiveCallbackFilterIterator depuis une interface RecursiveIterator
- RecursiveCallbackFilterIterator::getChildren — Retourne l'itérateur fils interne contenu dans un RecursiveCallbackFilterIterator
- RecursiveCallbackFilterIterator::hasChildren — Vérifie si l'élément courant de l'itérateur interne a un fils