イテレータ

目次

SPL にはイテレータが用意されており、オブジェクトを反復処理することができます。

SPL イテレータクラスツリー

  • ArrayIterator
    • RecursiveArrayIterator
  • EmptyIterator
  • IteratorIterator
    • AppendIterator
    • CachingIterator
      • RecursiveCachingIterator
    • FilterIterator
      • CallbackFilterIterator
        • RecursiveCallbackFilterIterator
      • RecursiveFilterIterator
        • ParentIterator
      • RegexIterator
        • RecursiveRegexIterator
    • InfiniteIterator
    • LimitIterator
    • NoRewindIterator
  • MultipleIterator
  • RecursiveIteratorIterator
    • RecursiveTreeIterator
  • DirectoryIterator (extends SplFileInfo)
    • FilesystemIterator
      • GlobIterator
      • RecursiveDirectoryIterator

AppendIterator クラス

はじめに

複数のイテレータをひとつひとつ処理するイテレータです。

クラス概要

AppendIterator
extends IteratorIterator
/* メソッド */
public AppendIterator::__construct()
public void AppendIterator::append(Iterator $iterator)
public mixed AppendIterator::current()
public ArrayIterator AppendIterator::getArrayIterator()
public intnull AppendIterator::getIteratorIndex()
public scalar AppendIterator::key()
public void AppendIterator::next()
public void AppendIterator::rewind()
public bool AppendIterator::valid()
/* 継承したメソッド */
public mixed current()
public Iteratornull getInnerIterator()
public mixed key()
public void next()
public void rewind()
public bool valid()

ArrayIterator クラス

はじめに

このイテレータは、配列やオブジェクトを反復処理する際に 値やキーを修正したり、要素を削除することができます。

同じ配列を何度も反復処理したい場合は、 ArrayObject のインスタンスとそれを参照する ArrayIterator のインスタンスを作成し、 foreach を使用するか getIterator() メソッドを手動でコールします。

クラス概要

ArrayIterator
implements SeekableIterator ArrayAccess Serializable Countable
/* 定数 */
public const int ArrayIterator::STD_PROP_LIST;
public const int ArrayIterator::ARRAY_AS_PROPS;
/* メソッド */
public __construct(arrayobject $array = [], int $flags = 0)
public void append(mixed $value)
public true asort(int $flags = SORT_REGULAR)
public int count()
public mixed current()
public array getArrayCopy()
public int getFlags()
public stringintnull key()
public true ksort(int $flags = SORT_REGULAR)
public true natcasesort()
public true natsort()
public void next()
public bool offsetExists(mixed $key)
public mixed offsetGet(mixed $key)
public void offsetSet(mixed $key, mixed $value)
public void offsetUnset(mixed $key)
public void rewind()
public void seek(int $offset)
public string serialize()
public void setFlags(int $flags)
public true uasort(callable $callback)
public true uksort(callable $callback)
public void unserialize(string $data)
public bool valid()

定義済み定数

ArrayIterator のフラグ

ArrayIterator::STD_PROP_LIST

オブジェクトのプロパティが、 リストとして(var_dump, foreach などから)アクセスされたときの通常の機能を持つ

ArrayIterator::ARRAY_AS_PROPS

エントリがプロパティとしてアクセスできる(読み書きともに)

CachingIterator クラス

はじめに

このオブジェクトは、別のイテレータからキャッシュされた反復処理をサポートします。

クラス概要

CachingIterator
extends IteratorIterator
implements ArrayAccess Countable Stringable
/* 定数 */
public const int CachingIterator::CALL_TOSTRING;
public const int CachingIterator::CATCH_GET_CHILD;
public const int CachingIterator::TOSTRING_USE_KEY;
public const int CachingIterator::TOSTRING_USE_CURRENT;
public const int CachingIterator::TOSTRING_USE_INNER;
public const int CachingIterator::FULL_CACHE;
/* メソッド */
public CachingIterator::__construct(Iterator $iterator, int $flags = CachingIterator::CALL_TOSTRING)
public int CachingIterator::count()
public mixed CachingIterator::current()
public array CachingIterator::getCache()
public int CachingIterator::getFlags()
public bool CachingIterator::hasNext()
public scalar CachingIterator::key()
public void CachingIterator::next()
public bool CachingIterator::offsetExists(string $key)
public mixed CachingIterator::offsetGet(string $key)
public void CachingIterator::offsetSet(string $key, mixed $value)
public void CachingIterator::offsetUnset(string $key)
public void CachingIterator::rewind()
public void CachingIterator::setFlags(int $flags)
public string CachingIterator::__toString()
public bool CachingIterator::valid()
/* 継承したメソッド */
public mixed current()
public Iteratornull getInnerIterator()
public mixed key()
public void next()
public void rewind()
public bool valid()

定義済み定数

CachingIterator::CALL_TOSTRING

それぞれの要素を文字列に変換します

CachingIterator::CATCH_GET_CHILD

子要素にアクセスする際、例外をスローしません

CachingIterator::TOSTRING_USE_KEY

文字列に変換する際に key を使います。

CachingIterator::TOSTRING_USE_CURRENT

文字列に変換する際に current を使います。

CachingIterator::TOSTRING_USE_INNER

文字列に変換する際に inner を使います。

CachingIterator::FULL_CACHE

読み込んだデータを全てキャッシュします。

変更履歴

バージョン 説明
8.0.0 CachingIterator は、 Stringable を新たに実装しました。

CallbackFilterIterator クラス

はじめに

クラス概要

CallbackFilterIterator
extends FilterIterator
/* メソッド */
public CallbackFilterIterator::__construct(Iterator $iterator, callable $callback)
public bool CallbackFilterIterator::accept()
/* 継承したメソッド */
public bool accept()
public mixed current()
public mixed key()
public void next()
public void rewind()
public bool valid()
public mixed IteratorIterator::current()
public Iteratornull IteratorIterator::getInnerIterator()
public mixed IteratorIterator::key()
public void IteratorIterator::next()
public void IteratorIterator::rewind()
public bool IteratorIterator::valid()

コールバックは、三つの引数を受け付けなければなりません。 それぞれ、現在のアイテム、現在のキー、そしてイテレータを表します。

例1 利用可能なコールバック引数

<?php

/**
 * CallbackFilterIterator 用のコールバック
 *
 * @param $current   現在のアイテムの値
 * @param $key       現在のアイテムのキー
 * @param $iterator  フィルタリングするイテレータ
 * @return boolean   現在のアイテムを受け付ける場合は TRUE、それ以外の場合は FALSE
 */
function my_callback($current$key$iterator) {
    
// ここにフィルタリングのコードを書きます
}

?>

任意の callable を使うことができます。 関数名を含む文字列、メソッドを表す配列、あるいは無名関数などです。

例2 コールバックの基本例

<?php

$dir 
= new FilesystemIterator(__DIR__);

// 大きなファイル ( > 100MB) をフィルタします
function is_large_file($current) {
    return 
$current->isFile() && $current->getSize() > 104857600;
}
$large_files = new CallbackFilterIterator($dir'is_large_file');

// ディレクトリをフィルタします
$files = new CallbackFilterIterator($dir, function ($current$key$iterator) {
    return 
$current->isDir() && ! $iterator->isDot();
});

?>

DirectoryIterator クラス

はじめに

DirectoryIterator クラスは、 ファイルシステムのディレクトリを閲覧するためのシンプルなインターフェイスです。

クラス概要

DirectoryIterator
extends SplFileInfo
implements SeekableIterator
/* メソッド */
public DirectoryIterator::__construct(string $directory)
public mixed DirectoryIterator::current()
public string DirectoryIterator::getBasename(string $suffix = "")
public string DirectoryIterator::getExtension()
public string DirectoryIterator::getFilename()
public bool DirectoryIterator::isDot()
public mixed DirectoryIterator::key()
public void DirectoryIterator::next()
public void DirectoryIterator::rewind()
public void DirectoryIterator::seek(int $offset)
public string DirectoryIterator::__toString()
public bool DirectoryIterator::valid()
/* 継承したメソッド */
public intfalse getATime()
public string getBasename(string $suffix = "")
public intfalse getCTime()
public string getExtension()
public SplFileInfo getFileInfo(stringnull $class = null)
public string getFilename()
public intfalse getGroup()
public intfalse getInode()
public stringfalse getLinkTarget()
public intfalse getMTime()
public intfalse getOwner()
public string getPath()
public SplFileInfonull getPathInfo(stringnull $class = null)
public string getPathname()
public intfalse getPerms()
public stringfalse getRealPath()
public intfalse getSize()
public stringfalse getType()
public bool isDir()
public bool isExecutable()
public bool isFile()
public bool isLink()
public bool isReadable()
public bool isWritable()
public SplFileObject openFile(string $mode = "r", bool $useIncludePath = false, resourcenull $context = null)
public void setFileClass(string $class = SplFileObject::class)
public void setInfoClass(string $class = SplFileInfo::class)
public string __toString()

EmptyIterator クラス

はじめに

空のイテレータ用の EmptyIterator クラスです。

クラス概要

EmptyIterator
implements Iterator
/* メソッド */
public never current()
public never key()
public void next()
public void rewind()
public false valid()

FilesystemIterator クラス

はじめに

Filesystem イテレータです。

クラス概要

FilesystemIterator
extends DirectoryIterator
/* 定数 */
public const int FilesystemIterator::CURRENT_MODE_MASK;
public const int FilesystemIterator::CURRENT_AS_PATHNAME;
public const int FilesystemIterator::CURRENT_AS_FILEINFO;
public const int FilesystemIterator::CURRENT_AS_SELF;
public const int FilesystemIterator::KEY_MODE_MASK;
public const int FilesystemIterator::KEY_AS_PATHNAME;
public const int FilesystemIterator::FOLLOW_SYMLINKS;
public const int FilesystemIterator::KEY_AS_FILENAME;
public const int FilesystemIterator::NEW_CURRENT_AND_KEY;
public const int FilesystemIterator::OTHER_MODE_MASK;
public const int FilesystemIterator::SKIP_DOTS;
public const int FilesystemIterator::UNIX_PATHS;
/* メソッド */
public FilesystemIterator::__construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS)
public stringSplFileInfoFilesystemIterator FilesystemIterator::current()
public int FilesystemIterator::getFlags()
public string FilesystemIterator::key()
public void FilesystemIterator::next()
public void FilesystemIterator::rewind()
public void FilesystemIterator::setFlags(int $flags)
/* 継承したメソッド */
public mixed current()
public string getBasename(string $suffix = "")
public string getExtension()
public string getFilename()
public bool isDot()
public mixed key()
public void next()
public void rewind()
public void seek(int $offset)
public string __toString()
public bool valid()
public intfalse SplFileInfo::getATime()
public string SplFileInfo::getBasename(string $suffix = "")
public intfalse SplFileInfo::getCTime()
public string SplFileInfo::getExtension()
public SplFileInfo SplFileInfo::getFileInfo(stringnull $class = null)
public string SplFileInfo::getFilename()
public intfalse SplFileInfo::getGroup()
public intfalse SplFileInfo::getInode()
public stringfalse SplFileInfo::getLinkTarget()
public intfalse SplFileInfo::getMTime()
public intfalse SplFileInfo::getOwner()
public string SplFileInfo::getPath()
public SplFileInfonull SplFileInfo::getPathInfo(stringnull $class = null)
public string SplFileInfo::getPathname()
public intfalse SplFileInfo::getPerms()
public stringfalse SplFileInfo::getRealPath()
public intfalse SplFileInfo::getSize()
public stringfalse SplFileInfo::getType()
public bool SplFileInfo::isDir()
public bool SplFileInfo::isExecutable()
public bool SplFileInfo::isFile()
public bool SplFileInfo::isLink()
public bool SplFileInfo::isReadable()
public bool SplFileInfo::isWritable()
public SplFileObject SplFileInfo::openFile(string $mode = "r", bool $useIncludePath = false, resourcenull $context = null)
public void SplFileInfo::setFileClass(string $class = SplFileObject::class)
public void SplFileInfo::setInfoClass(string $class = SplFileInfo::class)
public string SplFileInfo::__toString()

定義済み定数

FilesystemIterator::CURRENT_AS_PATHNAME

FilesystemIterator::current がパス名を返すようにします。

FilesystemIterator::CURRENT_AS_FILEINFO

FilesystemIterator::currentSplFileInfo のインスタンスを返すようにします。

FilesystemIterator::CURRENT_AS_SELF

FilesystemIterator::current が $this (FilesystemIterator) を返すようにします。

FilesystemIterator::CURRENT_MODE_MASK

FilesystemIterator::current をマスクします。

FilesystemIterator::KEY_AS_PATHNAME

FilesystemIterator::key がパス名を返すようにします。

FilesystemIterator::KEY_AS_FILENAME

FilesystemIterator::key がファイル名を返すようにします。

RecursiveDirectoryIterator::hasChildren がシンボリックリンクのリンク先をたどるようにします。

FilesystemIterator::KEY_MODE_MASK

FilesystemIterator::key をマスクします。

FilesystemIterator::NEW_CURRENT_AND_KEY

FilesystemIterator::KEY_AS_FILENAME | FilesystemIterator::CURRENT_AS_FILEINFO と同じ。

FilesystemIterator::OTHER_MODE_MASK

FilesystemIterator::getFlagsFilesystemIterator::setFlags で使うマスク

FilesystemIterator::SKIP_DOTS

ドットファイル (. および ..) をスキップします。

FilesystemIterator::UNIX_PATHS

システムのデフォルトにかかわらず、Unix スタイルのスラッシュでパスをあらわすようにします。 コンストラクタから渡された path は変更されないことに注意しましょう。

FilterIterator クラス

はじめに

この抽象イテレータは、望まざる値をフィルタリングします。 独自のイテレータフィルタを実装するには、このクラスを継承しなければなりません。 また、サブクラスでは FilterIterator::accept を実装する必要があります。

クラス概要

abstract FilterIterator
extends IteratorIterator
/* メソッド */
public FilterIterator::__construct(Iterator $iterator)
public bool FilterIterator::accept()
public mixed FilterIterator::current()
public mixed FilterIterator::key()
public void FilterIterator::next()
public void FilterIterator::rewind()
public bool FilterIterator::valid()
/* 継承したメソッド */
public mixed current()
public Iteratornull getInnerIterator()
public mixed key()
public void next()
public void rewind()
public bool valid()

GlobIterator クラス

はじめに

ファイルシステムで、glob と同じ形式の反復処理を行います。

クラス概要

GlobIterator
extends FilesystemIterator
implements Countable
/* 継承した定数 */
public const int FilesystemIterator::CURRENT_MODE_MASK;
public const int FilesystemIterator::CURRENT_AS_PATHNAME;
public const int FilesystemIterator::CURRENT_AS_FILEINFO;
public const int FilesystemIterator::CURRENT_AS_SELF;
public const int FilesystemIterator::KEY_MODE_MASK;
public const int FilesystemIterator::KEY_AS_PATHNAME;
public const int FilesystemIterator::FOLLOW_SYMLINKS;
public const int FilesystemIterator::KEY_AS_FILENAME;
public const int FilesystemIterator::NEW_CURRENT_AND_KEY;
public const int FilesystemIterator::OTHER_MODE_MASK;
public const int FilesystemIterator::SKIP_DOTS;
public const int FilesystemIterator::UNIX_PATHS;
/* メソッド */
public GlobIterator::__construct(string $pattern, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)
public int GlobIterator::count()
/* 継承したメソッド */
public stringSplFileInfoFilesystemIterator current()
public int getFlags()
public string key()
public void next()
public void rewind()
public void setFlags(int $flags)
public mixed DirectoryIterator::current()
public string DirectoryIterator::getBasename(string $suffix = "")
public string DirectoryIterator::getExtension()
public string DirectoryIterator::getFilename()
public bool DirectoryIterator::isDot()
public mixed DirectoryIterator::key()
public void DirectoryIterator::next()
public void DirectoryIterator::rewind()
public void DirectoryIterator::seek(int $offset)
public string DirectoryIterator::__toString()
public bool DirectoryIterator::valid()
public intfalse SplFileInfo::getATime()
public string SplFileInfo::getBasename(string $suffix = "")
public intfalse SplFileInfo::getCTime()
public string SplFileInfo::getExtension()
public SplFileInfo SplFileInfo::getFileInfo(stringnull $class = null)
public string SplFileInfo::getFilename()
public intfalse SplFileInfo::getGroup()
public intfalse SplFileInfo::getInode()
public stringfalse SplFileInfo::getLinkTarget()
public intfalse SplFileInfo::getMTime()
public intfalse SplFileInfo::getOwner()
public string SplFileInfo::getPath()
public SplFileInfonull SplFileInfo::getPathInfo(stringnull $class = null)
public string SplFileInfo::getPathname()
public intfalse SplFileInfo::getPerms()
public stringfalse SplFileInfo::getRealPath()
public intfalse SplFileInfo::getSize()
public stringfalse SplFileInfo::getType()
public bool SplFileInfo::isDir()
public bool SplFileInfo::isExecutable()
public bool SplFileInfo::isFile()
public bool SplFileInfo::isLink()
public bool SplFileInfo::isReadable()
public bool SplFileInfo::isWritable()
public SplFileObject SplFileInfo::openFile(string $mode = "r", bool $useIncludePath = false, resourcenull $context = null)
public void SplFileInfo::setFileClass(string $class = SplFileObject::class)
public void SplFileInfo::setInfoClass(string $class = SplFileInfo::class)
public string SplFileInfo::__toString()

InfiniteIterator クラス

はじめに

InfiniteIterator は、 他のイテレータを受け取って無限に反復させます。 最後までたどり着いたときに手動で巻き戻す必要はありません。

クラス概要

InfiniteIterator
extends IteratorIterator
/* メソッド */
public InfiniteIterator::__construct(Iterator $iterator)
public void InfiniteIterator::next()
/* 継承したメソッド */
public mixed current()
public Iteratornull getInnerIterator()
public mixed key()
public void next()
public void rewind()
public bool valid()

IteratorIterator クラス

はじめに

このイテレータラッパーを使うと、 Traversable なものなら何でもイテレータに変換することができます。 注意すべきなのは、Iterator を実装していない大半のクラスにはそれなりの理由 (Iterator の機能群を完全には提供できないなど) があるということです。 もしそうならば、誤使用を防ぐような方法を提供すべきです、 でなければ、例外や致命的なエラーが起こり得ます。

クラス概要

IteratorIterator
implements OuterIterator
/* メソッド */
public __construct(Traversable $iterator, stringnull $class = null)
public mixed current()
public Iteratornull getInnerIterator()
public mixed key()
public void next()
public void rewind()
public bool valid()

注意

注意:

このクラスは、内部のイテレータのメソッドへのアクセスを許可するために、マジックメソッド __call を利用します。

LimitIterator クラス

はじめに

LimitIterator クラスは、ある Iterator 上の限られたサブセットに対する反復処理を行います。

クラス概要

LimitIterator
extends IteratorIterator
/* メソッド */
public LimitIterator::__construct(Iterator $iterator, int $offset = 0, int $limit = -1)
public mixed LimitIterator::current()
public int LimitIterator::getPosition()
public mixed LimitIterator::key()
public void LimitIterator::next()
public void LimitIterator::rewind()
public int LimitIterator::seek(int $offset)
public bool LimitIterator::valid()
/* 継承したメソッド */
public mixed current()
public Iteratornull getInnerIterator()
public mixed key()
public void next()
public void rewind()
public bool valid()

例1 LimitIterator の使用例

<?php

// 限定した処理を行うイテレータを作成します
$fruits = new ArrayIterator(array(
    
'apple',
    
'banana',
    
'cherry',
    
'damson',
    
'elderberry'
));

// 最初の三つの果物だけをループ対象とします
foreach (new LimitIterator($fruits03) as $fruit) {
    
var_dump($fruit);
}

echo 
"\n";

// 三番目の果物から最後までをループ対象とします
// 注意: オフセットは 0 から始まり、0 は apple です
foreach (new LimitIterator($fruits2) as $fruit) {
    
var_dump($fruit);
}

?>

上の例の出力は以下となります。

string(5) "apple"
string(6) "banana"
string(6) "cherry"

string(6) "cherry"
string(6) "damson"
string(10) "elderberry"

MultipleIterator クラス

はじめに

アタッチしたすべてのイテレータを順に処理するイテレータです。

クラス概要

MultipleIterator
implements Iterator
/* 定数 */
public const int MultipleIterator::MIT_NEED_ANY;
public const int MultipleIterator::MIT_NEED_ALL;
public const int MultipleIterator::MIT_KEYS_NUMERIC;
public const int MultipleIterator::MIT_KEYS_ASSOC;
/* メソッド */
public __construct(int $flags = MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC)
public void attachIterator(Iterator $iterator, stringintnull $info = null)
public bool containsIterator(Iterator $iterator)
public int countIterators()
public array current()
public void detachIterator(Iterator $iterator)
public int getFlags()
public array key()
public void next()
public void rewind()
public void setFlags(int $flags)
public bool valid()

定義済み定数

MultipleIterator::MIT_NEED_ANY

すべてのサブイテレータが処理可能である必要はありません。

MultipleIterator::MIT_NEED_ALL

すべてのサブイテレータが正しく反復処理できることを要求します。

MultipleIterator::MIT_KEYS_NUMERIC

キーは、サブイテレータの位置から作成されます。

MultipleIterator::MIT_KEYS_ASSOC

キーは、サブイテレータに関連付けられた情報から作成されます。

NoRewindIterator クラス

はじめに

このイテレータは巻き戻しの操作を無視します。 これにより、一部のみを走査する 複数の foreach ループでイテレータを処理することが可能になります。

クラス概要

NoRewindIterator
extends IteratorIterator
/* メソッド */
public NoRewindIterator::__construct(Iterator $iterator)
public mixed NoRewindIterator::current()
public mixed NoRewindIterator::key()
public void NoRewindIterator::next()
public void NoRewindIterator::rewind()
public bool NoRewindIterator::valid()
/* 継承したメソッド */
public mixed current()
public Iteratornull getInnerIterator()
public mixed key()
public void next()
public void rewind()
public bool valid()

ParentIterator クラス

はじめに

これは FilterIterator を継承したクラスで、 RecursiveIteratorIterator を使った再帰的な反復処理をできるようにします。 ただし、子を持つ要素しか表示しません。

クラス概要

ParentIterator
extends RecursiveFilterIterator
/* メソッド */
public ParentIterator::__construct(RecursiveIterator $iterator)
public bool ParentIterator::accept()
public ParentIterator ParentIterator::getChildren()
public bool ParentIterator::hasChildren()
public void ParentIterator::next()
public void ParentIterator::rewind()
/* 継承したメソッド */
public RecursiveFilterIteratornull getChildren()
public bool hasChildren()
public bool FilterIterator::accept()
public mixed FilterIterator::current()
public mixed FilterIterator::key()
public void FilterIterator::next()
public void FilterIterator::rewind()
public bool FilterIterator::valid()
public mixed IteratorIterator::current()
public Iteratornull IteratorIterator::getInnerIterator()
public mixed IteratorIterator::key()
public void IteratorIterator::next()
public void IteratorIterator::rewind()
public bool IteratorIterator::valid()

RecursiveArrayIterator クラス

はじめに

このイテレータは、ArrayIterator と同じように配列やオブジェクトを反復処理しつつ、 そのキーや値を消去したり書き換えたりすることができます。 さらに、現在のイテレータのエントリを反復処理することも可能です。

クラス概要

RecursiveArrayIterator
extends ArrayIterator
implements RecursiveIterator
/* 継承した定数 */
public const int ArrayIterator::STD_PROP_LIST;
public const int ArrayIterator::ARRAY_AS_PROPS;
/* 定数 */
public const int RecursiveArrayIterator::CHILD_ARRAYS_ONLY;
/* メソッド */
public RecursiveArrayIteratornull RecursiveArrayIterator::getChildren()
public bool RecursiveArrayIterator::hasChildren()
/* 継承したメソッド */
public __construct(arrayobject $array = [], int $flags = 0)
public void append(mixed $value)
public true asort(int $flags = SORT_REGULAR)
public int count()
public mixed current()
public array getArrayCopy()
public int getFlags()
public stringintnull key()
public true ksort(int $flags = SORT_REGULAR)
public true natcasesort()
public true natsort()
public void next()
public bool offsetExists(mixed $key)
public mixed offsetGet(mixed $key)
public void offsetSet(mixed $key, mixed $value)
public void offsetUnset(mixed $key)
public void rewind()
public void seek(int $offset)
public string serialize()
public void setFlags(int $flags)
public true uasort(callable $callback)
public true uksort(callable $callback)
public void unserialize(string $data)
public bool valid()

定義済み定数

RecursiveArrayIterator フラグ

RecursiveArrayIterator::CHILD_ARRAYS_ONLY

(オブジェクトではなく)配列のみが、再帰的な走査が可能な子を持つと見なす

RecursiveCachingIterator クラス

はじめに

...

クラス概要

RecursiveCachingIterator
extends CachingIterator
implements RecursiveIterator
/* 継承した定数 */
public const int CachingIterator::CALL_TOSTRING;
public const int CachingIterator::CATCH_GET_CHILD;
public const int CachingIterator::TOSTRING_USE_KEY;
public const int CachingIterator::TOSTRING_USE_CURRENT;
public const int CachingIterator::TOSTRING_USE_INNER;
public const int CachingIterator::FULL_CACHE;
/* メソッド */
public RecursiveCachingIterator::__construct(Iterator $iterator, int $flags = RecursiveCachingIterator::CALL_TOSTRING)
public RecursiveCachingIteratornull RecursiveCachingIterator::getChildren()
public bool RecursiveCachingIterator::hasChildren()
/* 継承したメソッド */
public int count()
public mixed current()
public array getCache()
public int getFlags()
public bool hasNext()
public scalar key()
public void next()
public bool offsetExists(string $key)
public mixed offsetGet(string $key)
public void offsetSet(string $key, mixed $value)
public void offsetUnset(string $key)
public void rewind()
public void setFlags(int $flags)
public string __toString()
public bool valid()
public mixed IteratorIterator::current()
public Iteratornull IteratorIterator::getInnerIterator()
public mixed IteratorIterator::key()
public void IteratorIterator::next()
public void IteratorIterator::rewind()
public bool IteratorIterator::valid()

RecursiveCallbackFilterIterator クラス

はじめに

クラス概要

RecursiveCallbackFilterIterator
extends CallbackFilterIterator
implements RecursiveIterator
/* メソッド */
public RecursiveCallbackFilterIterator::__construct(RecursiveIterator $iterator, callable $callback)
public RecursiveCallbackFilterIterator RecursiveCallbackFilterIterator::getChildren()
public bool RecursiveCallbackFilterIterator::hasChildren()
/* 継承したメソッド */
public bool accept()
public bool FilterIterator::accept()
public mixed FilterIterator::current()
public mixed FilterIterator::key()
public void FilterIterator::next()
public void FilterIterator::rewind()
public bool FilterIterator::valid()
public mixed IteratorIterator::current()
public Iteratornull IteratorIterator::getInnerIterator()
public mixed IteratorIterator::key()
public void IteratorIterator::next()
public void IteratorIterator::rewind()
public bool IteratorIterator::valid()

コールバックは、三つの引数を受け付けなければなりません。 それぞれ、現在のアイテム、現在のキー、そしてイテレータを表します。

例1 利用可能なコールバック引数

<?php

/**
 * RecursiveCallbackFilterIterator 用のコールバック
 *
 * @param $current   現在のアイテムの値
 * @param $key       現在のアイテムのキー
 * @param $iterator  フィルタリングするイテレータ
 * @return boolean   現在のアイテムを受け付ける場合は TRUE、それ以外の場合は FALSE
 */
function my_callback($current$key$iterator) {
    
// ここにフィルタリングのコードを書きます
}

?>

再帰イテレータのフィルタリングにはふたつの条件があります。 まず最初は再帰を許可するかどうかです。コールバック関数は、 現在のイテレータのアイテムが子を持つときに true を返さなければなりません。 二番目の条件が通常のフィルタリング条件で、 次の例におけるファイルサイズや拡張子のチェックがこれにあたります。

例2 再帰コールバックの基本例

<?php

$dir 
= new RecursiveDirectoryIterator(__DIR__);

// 大きなファイル ( > 100MB) をフィルタします
$files = new RecursiveCallbackFilterIterator($dir, function ($current$key$iterator) {
    
// 再帰を許可します
    
if ($iterator->hasChildren()) {
        return 
TRUE;
    }
    
// 巨大なファイルのチェックをします
    
if ($current->isFile() && $current->getSize() > 104857600) {
        return 
TRUE;
    }
    return 
FALSE;
});
 
foreach (new 
RecursiveIteratorIterator($files) as $file) {
    echo 
$file->getPathname() . PHP_EOL;
}

?>

RecursiveDirectoryIterator クラス

はじめに

RecursiveDirectoryIterator は、 ファイルシステムのディレクトリを再帰的に反復処理するためのインターフェイスです。

クラス概要

RecursiveDirectoryIterator
extends FilesystemIterator
implements RecursiveIterator
/* 継承した定数 */
public const int FilesystemIterator::CURRENT_MODE_MASK;
public const int FilesystemIterator::CURRENT_AS_PATHNAME;
public const int FilesystemIterator::CURRENT_AS_FILEINFO;
public const int FilesystemIterator::CURRENT_AS_SELF;
public const int FilesystemIterator::KEY_MODE_MASK;
public const int FilesystemIterator::KEY_AS_PATHNAME;
public const int FilesystemIterator::FOLLOW_SYMLINKS;
public const int FilesystemIterator::KEY_AS_FILENAME;
public const int FilesystemIterator::NEW_CURRENT_AND_KEY;
public const int FilesystemIterator::OTHER_MODE_MASK;
public const int FilesystemIterator::SKIP_DOTS;
public const int FilesystemIterator::UNIX_PATHS;
/* メソッド */
public RecursiveDirectoryIterator::__construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)
public RecursiveDirectoryIterator RecursiveDirectoryIterator::getChildren()
public string RecursiveDirectoryIterator::getSubPath()
public string RecursiveDirectoryIterator::getSubPathname()
public bool RecursiveDirectoryIterator::hasChildren(bool $allowLinks = false)
public string RecursiveDirectoryIterator::key()
public void RecursiveDirectoryIterator::next()
public void RecursiveDirectoryIterator::rewind()
/* 継承したメソッド */
public stringSplFileInfoFilesystemIterator current()
public int getFlags()
public string key()
public void next()
public void rewind()
public void setFlags(int $flags)
public mixed DirectoryIterator::current()
public string DirectoryIterator::getBasename(string $suffix = "")
public string DirectoryIterator::getExtension()
public string DirectoryIterator::getFilename()
public bool DirectoryIterator::isDot()
public mixed DirectoryIterator::key()
public void DirectoryIterator::next()
public void DirectoryIterator::rewind()
public void DirectoryIterator::seek(int $offset)
public string DirectoryIterator::__toString()
public bool DirectoryIterator::valid()
public intfalse SplFileInfo::getATime()
public string SplFileInfo::getBasename(string $suffix = "")
public intfalse SplFileInfo::getCTime()
public string SplFileInfo::getExtension()
public SplFileInfo SplFileInfo::getFileInfo(stringnull $class = null)
public string SplFileInfo::getFilename()
public intfalse SplFileInfo::getGroup()
public intfalse SplFileInfo::getInode()
public stringfalse SplFileInfo::getLinkTarget()
public intfalse SplFileInfo::getMTime()
public intfalse SplFileInfo::getOwner()
public string SplFileInfo::getPath()
public SplFileInfonull SplFileInfo::getPathInfo(stringnull $class = null)
public string SplFileInfo::getPathname()
public intfalse SplFileInfo::getPerms()
public stringfalse SplFileInfo::getRealPath()
public intfalse SplFileInfo::getSize()
public stringfalse SplFileInfo::getType()
public bool SplFileInfo::isDir()
public bool SplFileInfo::isExecutable()
public bool SplFileInfo::isFile()
public bool SplFileInfo::isLink()
public bool SplFileInfo::isReadable()
public bool SplFileInfo::isWritable()
public SplFileObject SplFileInfo::openFile(string $mode = "r", bool $useIncludePath = false, resourcenull $context = null)
public void SplFileInfo::setFileClass(string $class = SplFileObject::class)
public void SplFileInfo::setInfoClass(string $class = SplFileInfo::class)
public string SplFileInfo::__toString()

RecursiveFilterIterator クラス

はじめに

この抽象イテレータは、不要な値を RecursiveIterator から取り除きます。 このクラスを継承して、独自のフィルタを実装することができます。 RecursiveFilterIterator::accept は、サブクラスで必ず実装しなければなりません。

クラス概要

abstract RecursiveFilterIterator
extends FilterIterator
implements RecursiveIterator
/* メソッド */
public RecursiveFilterIterator::__construct(RecursiveIterator $iterator)
public RecursiveFilterIteratornull RecursiveFilterIterator::getChildren()
public bool RecursiveFilterIterator::hasChildren()
/* 継承したメソッド */
public bool accept()
public mixed current()
public mixed key()
public void next()
public void rewind()
public bool valid()
public mixed IteratorIterator::current()
public Iteratornull IteratorIterator::getInnerIterator()
public mixed IteratorIterator::key()
public void IteratorIterator::next()
public void IteratorIterator::rewind()
public bool IteratorIterator::valid()

RecursiveIteratorIterator クラス

はじめに

再帰的なイテレータの反復処理に使用します。

クラス概要

RecursiveIteratorIterator
implements OuterIterator
/* 定数 */
public const int RecursiveIteratorIterator::LEAVES_ONLY;
public const int RecursiveIteratorIterator::SELF_FIRST;
public const int RecursiveIteratorIterator::CHILD_FIRST;
public const int RecursiveIteratorIterator::CATCH_GET_CHILD;
/* メソッド */
public __construct(Traversable $iterator, int $mode = RecursiveIteratorIterator::LEAVES_ONLY, int $flags = 0)
public void beginChildren()
public void beginIteration()
public RecursiveIteratornull callGetChildren()
public bool callHasChildren()
public mixed current()
public void endChildren()
public void endIteration()
public int getDepth()
public RecursiveIterator getInnerIterator()
public intfalse getMaxDepth()
public RecursiveIteratornull getSubIterator(intnull $level = null)
public mixed key()
public void next()
public void nextElement()
public void rewind()
public void setMaxDepth(int $maxDepth = -1)
public bool valid()

定義済み定数

RecursiveIteratorIterator::LEAVES_ONLY

RecursiveIteratorIterator::SELF_FIRST

RecursiveIteratorIterator::CHILD_FIRST

RecursiveIteratorIterator::CATCH_GET_CHILD

RecursiveRegexIterator クラス

はじめに

この再帰イテレータは、別の再帰イテレータを正規表現でフィルタリングすることができます。

クラス概要

RecursiveRegexIterator
extends RegexIterator
implements RecursiveIterator
/* 継承した定数 */
public const int RegexIterator::USE_KEY;
public const int RegexIterator::INVERT_MATCH;
public const int RegexIterator::MATCH;
public const int RegexIterator::GET_MATCH;
public const int RegexIterator::ALL_MATCHES;
public const int RegexIterator::SPLIT;
public const int RegexIterator::REPLACE;
/* 継承したプロパティ */
public stringnull $replacement = null;
/* メソッド */
public RecursiveRegexIterator::__construct(
    RecursiveIterator $iterator,
    string $pattern,
    int $mode = RecursiveRegexIterator::MATCH,
    int $flags = 0,
    int $pregFlags = 0
)
public RecursiveRegexIterator RecursiveRegexIterator::getChildren()
public bool RecursiveRegexIterator::hasChildren()
/* 継承したメソッド */
public bool accept()
public int getFlags()
public int getMode()
public int getPregFlags()
public string getRegex()
public void setFlags(int $flags)
public void setMode(int $mode)
public void setPregFlags(int $pregFlags)
public bool FilterIterator::accept()
public mixed FilterIterator::current()
public mixed FilterIterator::key()
public void FilterIterator::next()
public void FilterIterator::rewind()
public bool FilterIterator::valid()
public mixed IteratorIterator::current()
public Iteratornull IteratorIterator::getInnerIterator()
public mixed IteratorIterator::key()
public void IteratorIterator::next()
public void IteratorIterator::rewind()
public bool IteratorIterator::valid()

RecursiveTreeIterator クラス

はじめに

RecursiveIterator を反復処理し、ASCII グラフィックツリーを生成します。

クラス概要

RecursiveTreeIterator
extends RecursiveIteratorIterator
/* 継承した定数 */
public const int RecursiveIteratorIterator::LEAVES_ONLY;
public const int RecursiveIteratorIterator::SELF_FIRST;
public const int RecursiveIteratorIterator::CHILD_FIRST;
public const int RecursiveIteratorIterator::CATCH_GET_CHILD;
/* 定数 */
public const int RecursiveTreeIterator::BYPASS_CURRENT;
public const int RecursiveTreeIterator::BYPASS_KEY;
public const int RecursiveTreeIterator::PREFIX_LEFT;
public const int RecursiveTreeIterator::PREFIX_MID_HAS_NEXT = 1;
public const int RecursiveTreeIterator::PREFIX_MID_LAST = 2;
public const int RecursiveTreeIterator::PREFIX_END_HAS_NEXT = 3;
public const int RecursiveTreeIterator::PREFIX_END_LAST = 4;
public const int RecursiveTreeIterator::PREFIX_RIGHT = 5;
/* メソッド */
public RecursiveTreeIterator::__construct(
    RecursiveIteratorIteratorAggregate $iterator,
    int $flags = RecursiveTreeIterator::BYPASS_KEY,
    int $cachingIteratorFlags = CachingIterator::CATCH_GET_CHILD,
    int $mode = RecursiveTreeIterator::SELF_FIRST
)
public void RecursiveTreeIterator::beginChildren()
public RecursiveIterator RecursiveTreeIterator::beginIteration()
public RecursiveIterator RecursiveTreeIterator::callGetChildren()
public bool RecursiveTreeIterator::callHasChildren()
public mixed RecursiveTreeIterator::current()
public void RecursiveTreeIterator::endChildren()
public void RecursiveTreeIterator::endIteration()
public string RecursiveTreeIterator::getEntry()
public string RecursiveTreeIterator::getPostfix()
public string RecursiveTreeIterator::getPrefix()
public mixed RecursiveTreeIterator::key()
public void RecursiveTreeIterator::next()
public void RecursiveTreeIterator::nextElement()
public void RecursiveTreeIterator::rewind()
public void RecursiveTreeIterator::setPostfix(string $postfix)
public void RecursiveTreeIterator::setPrefixPart(int $part, string $value)
public bool RecursiveTreeIterator::valid()
/* 継承したメソッド */
public void beginChildren()
public void beginIteration()
public RecursiveIteratornull callGetChildren()
public bool callHasChildren()
public mixed current()
public void endChildren()
public void endIteration()
public int getDepth()
public RecursiveIterator getInnerIterator()
public intfalse getMaxDepth()
public RecursiveIteratornull getSubIterator(intnull $level = null)
public mixed key()
public void next()
public void nextElement()
public void rewind()
public void setMaxDepth(int $maxDepth = -1)
public bool valid()

定義済み定数

RecursiveTreeIterator::BYPASS_CURRENT

RecursiveTreeIterator::BYPASS_KEY

RecursiveTreeIterator::PREFIX_LEFT

RecursiveTreeIterator::PREFIX_MID_HAS_NEXT

RecursiveTreeIterator::PREFIX_MID_LAST

RecursiveTreeIterator::PREFIX_END_HAS_NEXT

RecursiveTreeIterator::PREFIX_END_LAST

RecursiveTreeIterator::PREFIX_RIGHT

RegexIterator クラス

はじめに

このイテレータを使うと、別のイテレータを正規表現でフィルタリングすることができます。

クラス概要

RegexIterator
extends FilterIterator
/* 定数 */
public const int RegexIterator::USE_KEY;
public const int RegexIterator::INVERT_MATCH;
public const int RegexIterator::MATCH;
public const int RegexIterator::GET_MATCH;
public const int RegexIterator::ALL_MATCHES;
public const int RegexIterator::SPLIT;
public const int RegexIterator::REPLACE;
/* プロパティ */
public stringnull $replacement = null;
/* メソッド */
public RegexIterator::__construct(
    Iterator $iterator,
    string $pattern,
    int $mode = RegexIterator::MATCH,
    int $flags = 0,
    int $pregFlags = 0
)
public bool RegexIterator::accept()
public int RegexIterator::getFlags()
public int RegexIterator::getMode()
public int RegexIterator::getPregFlags()
public string RegexIterator::getRegex()
public void RegexIterator::setFlags(int $flags)
public void RegexIterator::setMode(int $mode)
public void RegexIterator::setPregFlags(int $pregFlags)
/* 継承したメソッド */
public bool accept()
public mixed current()
public mixed key()
public void next()
public void rewind()
public bool valid()
public mixed IteratorIterator::current()
public Iteratornull IteratorIterator::getInnerIterator()
public mixed IteratorIterator::key()
public void IteratorIterator::next()
public void IteratorIterator::rewind()
public bool IteratorIterator::valid()

定義済み定数

RegexIterator の操作モード

RegexIterator::ALL_MATCHES

現在のエントリにマッチするものをすべて返します (preg_match_all を参照ください)。

RegexIterator::GET_MATCH

現在のエントリに最初にマッチしたものを返します (preg_match を参照ください)。

RegexIterator::MATCH

現在のエントリに対するマッチ (フィルタ) のみを行います (preg_match を参照ください)。

RegexIterator::REPLACE

現在のエントリを置換します (preg_replace を参照ください。まだ完全には実装されていません)。

RegexIterator::SPLIT

現在のエントリで分割した値を返します (preg_split を参照ください)。

RegexIterator のフラグ

RegexIterator::USE_KEY

特別なフラグ: エントリの値ではなく、キーにマッチさせます。

RegexIterator::INVERT_MATCH

RegexIterator::accept の戻り値を反転させます。

プロパティ

replacement