drupol/phptree

此包已被废弃,不再维护。作者建议使用 loophp/phptree 包。

树数据结构的实现

维护者

详细信息

github.com/loophp/phptree

源代码

问题

资助包维护!
drupol

2.6.8 2022-01-20 09:56 UTC

README

Latest Stable Version GitHub stars Total Downloads GitHub Workflow Status Scrutinizer code quality Type Coverage Code Coverage Mutation testing badge License Donate!

PhpTree

描述

PHP 实现的树数据结构。

提供不同的树实现

  • 节点:基本类。
  • N-叉节点:(或 K-叉树)扩展基本类,允许指定节点的容量,一个节点可以拥有的最大子节点数。
  • 值节点:扩展 N-叉节点,允许将值附加到节点。
  • 键值节点:扩展值节点,允许将键和值附加到节点。
  • 前缀树节点:扩展键值节点,一个简单的 前缀树
  • 自平衡节点:扩展 N-叉节点,尝试使树尽可能对称。一旦添加子节点,就会自动平衡所有子节点。
  • Merkle 节点:一种树,其中每个非叶节点都标记为其子节点标签的加密哈希。

4 种树遍历算法:

  • 有序
  • 后序
  • 前序
  • 广度优先

导出器和导入器

  • 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

可选包

用法

<?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 测试您的代码。

贡献

请随意通过发送拉取请求进行贡献。我们通常是一个非常响应迅速的团队,我们将从开始到结束帮助您处理您的拉取请求。

由于某些原因,如果您无法对代码做出贡献但愿意帮助,赞助是一个好、合理且安全的方式,来表达对我们在这个包上投入时间的感激。

Github 上赞助我,或赞助 任何贡献者

更新日志

请参阅 CHANGELOG.md 以查看基于 git 提交 的变更日志。

对于更详细的变更日志,请查看 发布变更日志