drupol / 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
This package is auto-updated.
Last update: 2024-06-24 12:11:10 UTC
README
PhpTree
描述
PHP 实现的树数据结构。
提供不同的树实现
- 节点:基本类。
- N-叉节点:(或 K-叉树)扩展基本类,允许指定节点的容量,一个节点可以拥有的最大子节点数。
- 值节点:扩展 N-叉节点,允许将值附加到节点。
- 键值节点:扩展值节点,允许将键和值附加到节点。
- 前缀树节点:扩展键值节点,一个简单的 前缀树。
- 自平衡节点:扩展 N-叉节点,尝试使树尽可能对称。一旦添加子节点,就会自动平衡所有子节点。
- Merkle 节点:一种树,其中每个非叶节点都标记为其子节点标签的加密哈希。
- 有序
- 后序
- 前序
- 广度优先
导出器和导入器
- Ascii:将树导出为 ascii 图形,仅用于炫酷和可视化。
- Graph:使用 graphp/graphp 库将树导出为图。
- 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
更新日志
查看 CHANGELOG.MD
要求
- PHP >= 7.1
安装
composer require loophp/phptree
可选包
- drupol/launcher:使用操作系统上适当的应用程序自动打开资源。
- graphp/graphp:将树导出为图。
用法
<?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
测试您的代码。
贡献
请随意通过发送拉取请求进行贡献。我们通常是一个非常响应迅速的团队,我们将从开始到结束帮助您处理您的拉取请求。
由于某些原因,如果您无法对代码做出贡献但愿意帮助,赞助是一个好、合理且安全的方式,来表达对我们在这个包上投入时间的感激。
更新日志
请参阅 CHANGELOG.md 以查看基于 git 提交 的变更日志。
对于更详细的变更日志,请查看 发布变更日志。