La clase RecursiveCallbackFilterIterator
(PHP 5 >= 5.4.0)
Introducción
Sinopsis de la Clase
RecursiveCallbackFilterIterator
extends
CallbackFilterIterator
implements
OuterIterator
,
RecursiveIterator
{
/* Métodos */
/* Métodos heredados */
}Ejemplos
La llamada de retorno debería aceptar hasta tres argumentos: el elemento actual, la clave actual y el iterador, respectivamente.
Ejemplo #1 Argumentos disponibles de la llamada de retorno
<?php
/**
* Llamada de retorno para RecursiveCallbackFilterIterator
*
* @param $current El valor del elemento actual
* @param $key La clave del elemento actual
* @param $iterator El iterador a filtrar
* @return boolean TRUE si acepta el elemento actual, de lo contrario FALSE
*/
function my_callback($current, $key, $iterator) {
// Aquí, el código de filtrado
}
?>
Filtrar un iterador recursivo generalmente conlleva dos condiciones.
La primera es que, con el fin de permitir la recursividad, la función de
llamada de retorno debería devolver TRUE si el iterador actual tiene hijos.
La segunda es la condición normal de filtro, como el tamaño de fichero o la
comprobación de la extensión como en el ejemplo de abajo.
Ejemplo #2 Ejemplo básico de llamada de retorno recursiva
<?php
$dir = new FilesystemIterator(__DIR__);
// Filtrar ficheros de gran tamaño ( > 100MB)
$ficheros = new RecursiveCallbackFilterIterator($dir, function ($current, $key, $iterator) {
// Permitir recursividad
if ($iterator->hasChildren()) {
return TRUE;
}
// Buscar ficheros de gran tamaño
if ($current->isFile() && $current->getSize() > 104857600) {
return TRUE;
}
return FALSE;
});
foreach (new RecursiveIteratorIterator($ficheros) as $fichero) {
echo $fichero->getPathname() . PHP_EOL;
}
?>
Tabla de contenidos
- RecursiveCallbackFilterIterator::__construct — Crear un RecursiveCallbackFilterIterator desde un RecursiveIterator
- RecursiveCallbackFilterIterator::getChildren — D3evuelve los iteradores internos hijos contenidos en un RecursiveCallbackFilterIterator
- RecursiveCallbackFilterIterator::hasChildren — Comprueba si los iteradores internos del elemento actual tiene hijos