Lớp RecursiveIteratorIterator là lớp triển khai của giao diện: Iterator, OuterIterator với các phương thức và hằng số như sau:
RecursiveIteratorIterator implements OuterIterator { /* Constants */ const integer LEAVES_ONLY = 0 ; //Chỉ Duyệt qua các lá const integer SELF_FIRST = 1 ; //Duyệt qua cành rồi lá const integer CHILD_FIRST = 2 ; //Duyệt các là rồi cành của một nhánh const integer CATCH_GET_CHILD = 16 ; /* Methods */ public void beginChildren ( void ) public void beginIteration ( void ) public RecursiveIterator callGetChildren ( void ) public bool callHasChildren ( void ) public __construct ( Traversable $iterator [, int $mode = RecursiveIteratorIterator::LEAVES_ONLY [, int $flags = 0 ]] ) public mixed current ( void ) public void endChildren ( void ) public void endIteration ( void ) public int getDepth ( void ) public iterator getInnerIterator ( void ) public mixed getMaxDepth ( void ) public RecursiveIterator getSubIterator ([ int $level ] ) public mixed key ( void ) public void next ( void ) public void nextElement ( void ) public void rewind ( void ) public void setMaxDepth ([ string $max_depth = -1 ] ) public bool valid ( void ) /* Inherited methods */ public Iterator OuterIterator::getInnerIterator ( void ) }
Lớp này triển khai cấu trúc dữ liệu cây (tree)
Khởi tạo RecursiveIteratorIterator
$recursiveIteratorIterator = RecursiveIteratorIterator(Traversable $iterator, $mode = self::LEAVES_ONLY, $flags = 0);
Như vậy khởi tạo RecursiveIteratorIterator
từ một đối tượng Iterator
, xem thêm giao diện đối tượng này để biết chi tiết.
Ví dụ, một cây dữ liệu biểu diễn dưới dạng cây như sau:
Cây này biểu diễn dưới dạng dữ liệu Array như sau:
$tree = [ 'leaf-0', [ 'leaf-0-0', [ 'leaf-0-0-0', [ 'leaf-0-0-0-0', 'leaf-0-0-0-1' ] ], [ 'leaf-0-0-1', [ 'leaf-0-0-1-0', 'leaf-0-0-1-1' ] ] ] ];
Chuyển mảng này thành đối tượng dạng Iterator bằng cách sau:
$treeIterator = new RecursiveArrayIterator($tree);
Lúc đó có thể khởi tạo RecursiveIteratorIterator
và sử dụng như sau:
$treeIterator = new RecursiveArrayIterator($tree); $treeI = new RecursiveIteratorIterator($treeIterator, RecursiveIteratorIterator::LEAVES_ONLY); foreach ($treeI as $key=>$leaf) { echo "$key => $leaf", PHP_EOL; }
Chạy với $mode = RecursiveIteratorIterator::LEAVES_ONLY, kết quả:
0 => leaf-0 0 => leaf-0-0 0 => leaf-0-0-0 0 => leaf-0-0-0-0 1 => leaf-0-0-0-1 0 => leaf-0-0-1 0 => leaf-0-0-1-0 1 => leaf-0-0-1-1