PHP Conference Japan 2024

RecursiveFilterIterator 類別

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

簡介

這個抽象迭代器會篩選掉 RecursiveIterator 中不需要的值。 這個類別應該被繼承來實現自定義篩選器。 RecursiveFilterIterator::accept() 必須在子類別中實現。

類別概要

目錄

新增筆記

使用者貢獻的筆記 2 則筆記

lemats
13 年前
遞迴目錄/檔案列表,過濾掉 ".svn"

<?php

class MyRecursiveFilterIterator extends RecursiveFilterIterator {

public static
$FILTERS = array(
'.svn',
);

public function
accept() {
return !
in_array(
$this->current()->getFilename(),
self::$FILTERS,
true
);
}

}

$dirItr = new RecursiveDirectoryIterator('/sample/path');
$filterItr = new MyRecursiveFilterIterator($dirItr);
$itr = new RecursiveIteratorIterator($filterItr, RecursiveIteratorIterator::SELF_FIRST);
foreach (
$itr as $filePath => $fileInfo) {
echo
$fileInfo->getFilename() . PHP_EOL;
}

?>
Russell Dias
14 年前
我必須建立一個過濾器來獲取多維陣列中大於特定數字的值。

希望對其他人有幫助

<?php
類別 GreaterThanFilter 繼承 RecursiveFilterIterator {
protected
$limit;

public function
__construct(RecursiveIterator $recursiveIter, $limit) {
$this->limit = $limit;
parent::__construct($recursiveIter);
}
public function
accept() {
return
$this->hasChildren() || strlen($this->current()) >= $this->limit;
}
public function
getChildren() {
return new
self($this->getInnerIterator()->getChildren(), $this->limit);
}
}
$iter = new RecursiveArrayIterator($array);
$filter = new GreaterThanFilter($iter, 5);

foreach(new
RecursiveIteratorIterator($filter) as $key => $value)
{
echo
$value . "\n";
}
?>
To Top