표준 PHP 라이브러리(SPL) The RecursiveCallbackFilterIterator class

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


소개


클래스 개요

                  
class RecursiveCallbackFilterIterator extends CallbackFilterIterator implements RecursiveIterator {

  /* Methods */
  public __construct(RecursiveIterator $iterator, callable $callback)
  public getChildren(): RecursiveCallbackFilterIterator
  public hasChildren(): bool

  /* Inherited methods */
  public CallbackFilterIterator::accept(): bool
  public FilterIterator::accept(): bool
  public FilterIterator::current(): mixed
  public FilterIterator::getInnerIterator(): Iterator
  public FilterIterator::key(): mixed
  public FilterIterator::next(): void
  public FilterIterator::rewind(): void
  public FilterIterator::valid(): bool
  public IteratorIterator::current(): mixed
  public IteratorIterator::getInnerIterator(): ?Iterator
  public IteratorIterator::key(): mixed
  public IteratorIterator::next(): void
  public IteratorIterator::rewind(): void
  public IteratorIterator::valid(): bool
}
                  
                

Examples

콜백은 각각 현재 항목, 현재 키 및 반복자의 최대 3개의 인수를 허용해야 합니다.

예제 #1 사용 가능한 콜백 인수

                  
<?php

/**
 * Callback for RecursiveCallbackFilterIterator
 *
 * @param $current   Current item's value
 * @param $key       Current item's key
 * @param $iterator  Iterator being filtered
 * @return boolean   TRUE to accept the current item, FALSE otherwise
 */
function my_callback($current, $key, $iterator) {
    // Your filtering code here
}

?>
                  
                

재귀 반복자를 필터링하려면 일반적으로 두 가지 조건이 필요합니다. 첫 번째는 재귀를 허용하려면 현재 반복자 항목에 자식이 있는 경우 콜백 함수가 true를 반환해야 한다는 것입니다. 두 번째는 아래 예와 같이 파일 크기나 확장자 확인과 같은 정상적인 필터 조건입니다.

예제 #2 재귀 콜백 기본 예제

                  
<?php

$dir = new RecursiveDirectoryIterator(__DIR__);

// Filter large files ( > 100MB)
$files = new RecursiveCallbackFilterIterator($dir, function ($current, $key, $iterator) {
    // Allow recursion
    if ($iterator->hasChildren()) {
        return TRUE;
    }
    // Check for large file
    if ($current->isFile() && $current->getSize() > 104857600) {
        return TRUE;
    }
    return FALSE;
});

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

?>
                  
                

목차