DirectoryIterator (Bài trước)
(Bài tiếp) PHP CƠ BẢN

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:

leaf

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

Đăng ký nhận bài viết mới
DirectoryIterator (Bài trước)
(Bài tiếp) PHP CƠ BẢN