loophp / phptree
树数据结构的实现
2.6.8
2022-01-20 09:56 UTC
Requires
- php: >= 7.1
Requires (Dev)
- drupol/launcher: ^2.2
- drupol/php-conventions: ^5
- drupol/phpmerkle: ^2.2
- friends-of-phpspec/phpspec-code-coverage: ^5
- graphp/graphviz: ^0.2
- infection/infection: ^0.22
- infection/phpspec-adapter: ^0.1
- loophp/launcher: ^2.2.2
- microsoft/tolerant-php-parser: ^0.0.20
- nikic/php-parser: ^4
- phpspec/phpspec: ^7
README
PhpTree
描述
PHP实现树数据结构。
它提供了不同的树实现
- 节点:基本类。
- N-叉节点:(或K-叉树)扩展基本类,允许您指定节点的容量,一个节点可以拥有的最大子节点数。
- 值节点:扩展N-叉节点,允许您将值附加到节点。
- 键值节点:扩展值节点,允许您将键和值附加到节点。
- 字典树节点:扩展键值节点,是一个简单的字典树。
- 自动平衡节点:扩展N-叉节点,并尽可能使树对称。一旦添加子节点,就会自动平衡所有子节点。
- Merkle节点:一个树,其中每个非叶节点都标记为其子节点标签的加密哈希。
- 顺序
- 后序
- 前序
- 广度优先
导出器和导入器
- Ascii:将树导出为ASCII图形,仅用于炫酷和可视化。
- Graph:使用graphp/graphp库将树导出为Graph。
- GraphViz:将树导出为GraphViz格式的脚本。
- Text:将树导出为简单字符串,易于存储在数据库中。
- nikic/php-ast:从由PHP扩展AST生成的AST导入树。
- nikic/php-parser:从由nikic/php-parser生成的AST导入树。
- microsoft/tolerant-php-parser:从由microsoft/tolerant-php-parser生成的AST导入树。
修改器
- 反转:反转树,所有子节点都镜像。
文档
博客文章:https://not-a-number.io/2018/phptree-a-fast-tree-implementation
变更日志
要求
- PHP >= 7.1
安装
composer require loophp/phptree
可选包
- drupol/launcher:自动使用操作系统上适当的应用程序打开资源。
- graphp/graphp:将树导出为Graph。
用法
<?php declare(strict_types = 1); use loophp\phptree\Exporter\Gv; use loophp\phptree\Exporter\Image; use loophp\phptree\Node\ValueNode; use loophp\phptree\Exporter\Text; use loophp\launcher\Launcher; include './vendor/autoload.php'; // Create the root node. $tree = new ValueNode('root', 2); $nodes = []; foreach (\range('A', 'Z') as $v) { $nodes[] = new ValueNode($v, 2); } // Add children to the root node. $tree->add(...$nodes); // Export to text. $textExporter = new Text(); $textExporter->export($tree); // [root[A[C[G[O][P]][H[Q][R]]][D[I[S][T]][J[U][V]]]][B[E[K[W][X]][L[Y][Z]]][F[M][N]]]]⏎ // Export to a GraphViz script with the Gv exporter $graphvizExporter = new Gv(); $dotScript = $graphvizExporter->export($tree); file_put_contents('tree.dot', $dotScript); // Then do "dot -Tsvg tree.dot -o tree.svg" to export in SVG. // Or use the Image exporter that does it for you. $imageExporter = new Image(); $imageContent = $imageExporter->setFormat('png')->export($tree); file_put_contents('tree.png', $imageContent); // If you want to launch the image, you can use an optional package. // do: composer require drupol/launcher // then: Launcher::open('tree.png');
代码质量、测试和基准测试
每次将更改引入库时,Github都会运行测试和基准测试。
库使用PHPSpec编写的测试。请随意在spec
目录中检查它们。运行composer phpspec
以触发测试。
每次提交之前,都会使用GrumPHP进行一些检查,通过执行./vendor/bin/grumphp run
进行手动检查。
使用PHPBench来对库进行基准测试,运行基准测试的命令是:composer bench
使用PHPInfection来确保您的代码得到适当的测试,运行composer infection
来测试您的代码。
贡献
请随意通过发送pull请求来贡献。我们通常是一个非常反应迅速的团队,我们会从开始到结束帮助您通过pull请求。
由于某些原因,如果您无法对代码进行贡献但愿意帮忙,赞助是一个好、合理且安全的方式来表达对我们在这款包上投入时间的感激之情。
变更日志
请参阅CHANGELOG.md以查看基于git提交的变更日志。
请检查发布变更日志以获取更详细的变更日志。