La clase RecursiveCallbackFilterIterator

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

Introducción

Sinopsis de la Clase

Ejemplos

La función de devolución de llamada debe aceptar hasta 3 argumentos: el elemento actual, la clave actual, y el iterador actual, respectivamente.

Ejemplo #1 Argumentos disponibles para la función de devolución de llamada

<?php

/**
* Función de devolución de llamada para RecursiveCallbackFilterIterator
*
* @param $current El valor del elemento actual
* @param $key La clave del elemento actual
* @param $iterator Iterador a filtrar
* @return boolean TRUE para aceptar el elemento actual, FALSE en caso contrario
*/
function my_callback($current, $key, $iterator) {
// Su filtro aquí
}

?>

El filtrado de un iterador recursivo implica generalmente 2 condiciones. La primera es que, para permitir la recursión, la función de devolución de llamada debe devolver true si el elemento del iterador actual tiene un hijo. La segunda es una condición de filtrado normal, como la verificación del tamaño de fichero o la verificación de la extensión como en el ejemplo siguiente.

Ejemplo #2 Ejemplo simple de una función de devolución de llamada recursiva

<?php

$dir
= new RecursiveDirectoryIterator(__DIR__);

// Filtro de ficheros grandes ( > 100MB)
$files = new RecursiveCallbackFilterIterator($dir, function ($current, $key, $iterator) {
// Permite la recursión
if ($iterator->hasChildren()) {
return
TRUE;
}
// Verifica ficheros grandes
if ($current->isFile() && $current->getSize() > 104857600) {
return
TRUE;
}
return
FALSE;
});

foreach (new
RecursiveIteratorIterator($files) as $file) {
echo
$file->getPathname() . PHP_EOL;
}

?>

Tabla de contenidos