PHP Classes

File: README.md

Recommend this page to a friend!
  Classes of Smoren Freelight   PHP Tree tools   README.md   Download  
File: README.md
Role: Documentation
Content type: text/markdown
Description: Documentation
Class: PHP Tree tools
Build and traverse structures organized as trees
Author: By
Last change:
Date: 1 year ago
Size: 6,224 bytes
 

Contents

Class file image Download

PHP Tree Tools

Packagist PHP Version Support Scrutinizer Code Quality Coverage Status Build and test License: MIT

Library for working with trees.

How to install to your project

composer require smoren/tree-tools

Quick reference

Tree Walker

| Reducer | Description | Code Snippet | |---------------------------------------------------|--------------------------------------------|------------------------------------------------------------------| | traverseDepthFirst | Iterates a tree using depth-first search | TreeWalker::traverseDepthFirst($data, $childrenContainerKey) | | traverseBreadthFirst | Iterates a tree using breadth-first search | TreeWalker::traverseBreadthFirst($data, $childrenContainerKey) |

Tree Builder

| Reducer | Description | Code Snippet | |-------------------|------------------------------------------|-----------------------------------------------------------------------------------------------------------| | build | Builds a tree from given flat collection | TreeBuilder::build($collection, $idField, $parentIdField, $childrenContainerField, $itemContainerField) |

Usage

Tree Walker

Traverse Depth First

Iterates a tree like a flat collection using depth-first traversal.


If `$childrenContainerKey` is not null looks for children items using by this key only.

Otherwise, considers any subarray to contain children.

use Smoren\TreeTools\TreeWalker;

$tree = [

[
    'id' => 1,
    'children' => [
        ['id' => 11],
        [
            'id' => 12,
            'children' => [
                ['id' => 121],
                ['id' => 122],
            ],
        ],
    ],
],
[
    'id' => 2,
    'children' => [
        ['id' => 21],
    ],
],
['id' => 3],

];

$result = [];

foreach(TreeWalker::traverseDepthFirst($tree) as $item) {

$result[] = $item['id'];

} var_dump($result); // [1, 11, 12, 121, 122, 2, 21, 3]


#### Traverse Breadth First

Iterates a tree like a flat collection using depth-breadth traversal.

If $childrenContainerKey is not null looks for children items using by this key only.

Otherwise, considers any subarray to contain children.

use Smoren\TreeTools\TreeWalker;

$tree = [
    [
        'id' => 1,
        'children' => [
            ['id' => 11],
            [
                'id' => 12,
                'children' => [
                    ['id' => 121],
                    ['id' => 122],
                ],
            ],
        ],
    ],
    [
        'id' => 2,
        'children' => [
            ['id' => 21],
        ],
    ],
    ['id' => 3],
];

$result = [];

foreach(TreeWalker::traverseBreadthFirst($tree) as $item) {
    $result[] = $item['id'];
}
var_dump($result);
// [1, 2, 3, 11, 12, 21, 121, 122]

Tree Builder

Build

Builds a tree from given flat collection of items with relations.

TreeBuilder::build(
    iterable $collection,
    string $idField = 'id',
    string $parentIdField = 'parent_id',
    string $childrenContainerField = 'children',
    string $itemContainerField = 'item'
): array

use Smoren\TreeTools\TreeBuilder;

$input = [
    ['id' => 1, 'name' => 'Item 1', 'parent_id' => null],
    ['id' => 2, 'name' => 'Item 1.1', 'parent_id' => 1],
    ['id' => 3, 'name' => 'Item 1.2', 'parent_id' => 1],
    ['id' => 4, 'name' => 'Item 1.1.1', 'parent_id' => 2],
    ['id' => 5, 'name' => 'Item 2', 'parent_id' => null],
    ['id' => 6, 'name' => 'Item 3', 'parent_id' => null],
    ['id' => 7, 'name' => 'Item 3.1', 'parent_id' => 6],
    ['id' => 8, 'name' => 'Item 3.2', 'parent_id' => 6],
];

$tree = TreeBuilder::build($input);
print_r($tree);
/*
[
    [
        'id' => 1,
        'name' => 'Item 1',
        'parent_id' => null,
        'children' => [
            [
                'id' => 2,
                'name' => 'Item 1.1',
                'parent_id' => 1,
                'children' => [
                    [
                        'id' => 4,
                        'name' => 'Item 1.1.1',
                        'parent_id' => 2,
                        'children' => [],
                    ]
                ],
            ],
            [
                'id' => 3,
                'name' => 'Item 1.2',
                'parent_id' => 1,
                'children' => [],
            ],
        ],
    ],
    [
        'id' => 5,
        'name' => 'Item 2',
        'parent_id' => null,
        'children' => [],
    ],
    [
        'id' => 6,
        'name' => 'Item 3',
        'parent_id' => null,
        'children' => [
            [
                'id' => 7,
                'name' => 'Item 3.1',
                'parent_id' => 6,
                'children' => [],
            ],
            [
                'id' => 8,
                'name' => 'Item 3.2',
                'parent_id' => 6,
                'children' => [],
            ],
        ]
    ],
]
*/

Unit testing

composer install
composer test-init
composer test

License

PHP Tree Tools is licensed under the MIT License.