smoren / tree-tools
基于迭代器的树工具
v0.1.0
2023-01-11 13:00 UTC
Requires
- php: >=7.4.0
- smoren/type-tools: ^2.0.0
Requires (Dev)
- codeception/codeception: ^4.2.1
- codeception/module-asserts: ^2.0
- php-coveralls/php-coveralls: ^2.0
- phpstan/phpstan: ^1.8
- squizlabs/php_codesniffer: 3.*
This package is auto-updated.
Last update: 2024-09-11 16:32:27 UTC
README
用于操作树的库。
如何在项目中安装
composer require smoren/tree-tools
快速参考
树遍历器
树构建器
使用方法
树遍历器
深度优先遍历
使用深度优先遍历像扁平集合一样迭代树。
TreeWalker::traverseDepthFirst(iterable $data, ?string $childrenContainerKey = null): Generator
如果 $childrenContainerKey
不为空,则仅使用此键查找子项。
否则,任何子数组都视为包含子项。
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]
广度优先遍历
使用广度优先遍历像扁平集合一样迭代树。
TreeWalker::traverseBreadthFirst(iterable $data, ?string $childrenContainerKey = null): Generator
如果 $childrenContainerKey
不为空,则仅使用此键查找子项。
否则,任何子数组都视为包含子项。
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]
树构建器
构建
从给定具有关系的扁平项目集合构建树。
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' => [], ], ] ], ] */
单元测试
composer install
composer test-init
composer test
许可
PHP Tree Tools 在 MIT 许可证下发布。