PHP.mk документација

RecursiveCallbackFilterIterator

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

class.recursivecallbackfilteriterator.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека class.recursivecallbackfilteriterator.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
RecursiveCallbackFilterIterator

Референца за `class.recursivecallbackfilteriterator.php` со подобрена типографија и навигација.

class.recursivecallbackfilteriterator.php

Класата RecursiveCallbackFilterIterator

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

Вовед

Синопсис на класата

class RecursiveCallbackFilterIterator extends CallbackFilterIterator implements RecursiveIterator {
/* Методи */
public function __construct(RecursiveIterator $iterator, callable $callback)
public function hasChildren(): bool
/* Наследени методи */
public function FilterIterator::accept(): bool
public function FilterIterator::current(): mixed
public function FilterIterator::key(): mixed
public function FilterIterator::next(): void
public function FilterIterator::rewind(): void
public function FilterIterator::valid(): bool
public function IteratorIterator::current(): mixed
public function IteratorIterator::key(): mixed
public function IteratorIterator::next(): void
public function IteratorIterator::rewind(): void
public function IteratorIterator::valid(): bool
}

Примери

Повикот треба да прифаќа до три аргументи: тековната ставка, тековниот клуч и итераторот, соодветно.

Пример #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;
}

?>

Содржина

Белешки од корисници 2 забелешки

а дот беллунџа ат џимејл дот ком
пред 13 години
Here is a code that may implement similar functionality in PHP 5.2 or 5.3 :

<?php

class RecursiveCallbackFilterIterator extends RecursiveFilterIterator {
    
    public function __construct ( RecursiveIterator $iterator, $callback ) {
        
        $this->callback = $callback;
        
        parent::__construct($iterator);
        
    }
    
    public function accept () {
        
        $callback = $this->callback;
        
        return $callback(parent::current(), parent::key(), parent::getInnerIterator());
        
    }
    
    public function getChildren () {
        
        return new self($this->getInnerIterator()->getChildren(), $this->callback);
        
    }
    
}

?>
Анонимен
пред 14 години
Note that the following filters out both files and directories whos names start with the letter "T". The important thing here is that since the function returns false for a directory entry whos name starts with T, the directory is also not traversed recursively.

<?php
$doesntStartWithLetterT = function ($current) {
    return $current->getFileName()[0] !== 'T';
};

$rdi = new RecursiveDirectoryIterator(__DIR__);
$files = new RecursiveCallbackFilterIterator($rdi, $doesntStartWithLetterT);
foreach (new RecursiveIteratorIterator($files) as $file) {
    echo $file->getPathname() . PHP_EOL;
}
?>
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.