Liên hệ
spl

RecursiveIteratorIterator

Tìm hiểu lớp PHP RecursiveIteratorIterator lớp ứng dụng để đệ quy dữ liệu dạng cây

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 )
}

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

 

 

 

 

Vui lòng đăng ký ủng hộ kênh