marc/flattree

邻接表树构建器

dev-master 2017-02-23 18:27 UTC

This package is auto-updated.

Last update: 2024-09-18 06:15:29 UTC


README

Build Status Coverage Status Latest Stable Version License

设置

composer require marc/flattree:dev-master

使用

递归邻接表

假设你有一个以下邻接表作为表示某些递归树的递归树数据

基于给定的数据集构建一个树,其中 parent_id=employee_id

use marc\flatrree\{unfold, debug};

$tree = unfold($associative_data, 'parent_id=employee_id');

echo debug($tree, "{job_title}: {first_name}");

调试输出

├─ <null>: <null>
│  ├─ Managing Director: Bill
│  │  ├─ Customer Services: Angela
│  │  │  └─ Assistant 1: Henry
│  │  │  └─ Assistant 2: Nicola
│  │  ├─ Development Manager: Ben
│  │  │  ├─ Snr Developer: Kerry
│  │  │  │  └─ Jrn Developer: Tim
│  │  │  └─ Assistant: James

非递归邻接表

classanimal 分组构建树

use marc\flattree\{unfold, debug};

$tree = unfold($data, ['class', 'animal']);

echo debug($tree, ['{:level}', '{:level}', '{breed}']);

调试输出

├─ mammal
│  ├─ dog
│  │  └─ Dalmatian
│  │  └─ Bulldog
│  │  └─ Lhasa Apso
│  ├─ cat
│  │  └─ Persian

再增加一个分组级别,现在按 classanimalsize 分组

use marc\flattree\{unfold, debug};

$tree = unfold($associative_data, ['class', 'animal', 'size']);

echo debug($tree, ['{:level}', '{:level}', '{:level}', '{breed}']);

调试输出

├─ mammal
│  ├─ dog
│  │  ├─ big
│  │  │  └─ Dalmatian
│  │  ├─ small
│  │  │  └─ Bulldog
│  │  │  └─ Lhasa Apso
│  ├─ cat
│  │  ├─ small
│  │  │  └─ Persian

最终备注

请注意,marc\flattree\debug 函数仅用于调试目的 ,你不应依赖于其输出。

参考 http://www.ibase.ru/files/articles/programming/dbmstrees/sqltrees.html

版权

版权所有 (c) 2016-* Márcio Almada。在 MIT 风格许可的条款下分发。有关详细信息,请参阅 LICENSE。