PHPackages                             artnv/tree-builder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. artnv/tree-builder

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

artnv/tree-builder
==================

Adjacency list

0.2(7y ago)120MITPHP

Since Jan 17Pushed 7y ago1 watchersCompare

[ Source](https://github.com/artnv/tree-builder)[ Packagist](https://packagist.org/packages/artnv/tree-builder)[ RSS](/packages/artnv-tree-builder/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependenciesVersions (2)Used By (0)

TreeBuilder
===========

[](#treebuilder)

```
php v0.2
js  v0.1.1

```

Библиотека для построения вложенных списков по типу родитель-потомок (Adjacency list). Можно применять для создания меню, списка категорий, вложенных комментариев, хлебных крошек и т.д.

[![](example.jpg?raw=true)](example.jpg?raw=true)

Возможности:

- **Уровень вложенности не ограничен**
- **Элементы в массиве могут идти непоследовательно, т.е. Потомок может быть выше или ниже родителя**
- **Библиотека доступна в двух версиях, для PHP и для Javascript**

Пример:
**Еще больше примеров вы найдете в директории /php/**

Установка
---------

[](#установка)

Через Composer

```
composer require artnv/tree-builder

```

или добавить

```
"artnv/tree-builder": "^0.2"

```

в секцию `require` в файле `composer.json`

### PHP

[](#php)

```
$tb = TreeBuilder::create($dataArr, null, null, false);
// create($inputArr, $aliases = null, $userParams = [], $sort_enabled = true);
```

**Входные данные для построения дерева**
Обязательные поля: `id`, `parent`, `title` и `position` (если используется сортировка)

```
$dataArr[] = [
    'id' => 1
    'parent_id' => 0
    'img' => '123.jpg'
    'name' => 'Category #1'
    'keywords' => ''
    'description' => ''
    'position' => 2
];
```

**Алиасы**
Данные из разных источников емеют разное название полей, чтобы их не менять, просто укажите их в качестве значений у ключей.
Если алиасы не переданы в качестве аргумента, то используются по умолчанию:

```
$aliases = [
    'id' => 'id',
    'parent' => 'parent',
    'title' => 'title',
    'child' => 'child',
    'position' => 'position',
];
```

**Параметры пользователя**
Будут доступны в шаблонных методах rootNode и childNode

```
$userParams = [];
```

**Сортировка**

```
$sort_enabled = true;
```

По умолчанию - true. В массиве должен быть ключ `['position']` чтобы сортировка работала, если его нет, отключите сортировку.
Для каждого узла с одним родителем `['parent_id']` позиция начинается с нуля и сортирует от большего числа к меньшему.

**Шаблоны оформления дерева**
В директории уже есть готовые примеры `HtmlTree.php` и `SelectTree.php`, а если вам нужен свой шаблон, то отнаследуйтесь от TreeBuilder и реализуйте интерфейс TreeBuilderInterface с двумя методами:

Дочерние узлы

```
childNode($item, $childNodes, $aliases, $nestingLevel, $userParams);
```

- `$item` - текущий элемент массива
- `$childNodes` - дочерние узлы текущего элемента-родителя
- `$aliases` - алиасы
- `$nestingLevel` - уровень вложенности (на основе этого значения можно добавлять линию для визуального оформления)
- `$userParams` - параметры пользователя

Корневой узел

```
rootNode($nodes, $firstStart, $userParams);
```

- `$nodes` - это данные из childNode()
- `$firstStart` - true, при первом запуске
- `$userParams` - параметры пользователя

**Примеры использования**

```
$node_1 = ['parent' => 24];
$node_2 = ['id' => 888];
```

- `$tb->getTree()` - возвращает ассоциативный массив
- `$tb->showTree()` - возвращает html дерево на основе шаблона
- `$tb->getParents($node_1)` - возвращает ассоциативный массив с цепочкой родительских узлов типа "хлебных крошек"
- `$tb->getChilds($node_2)` - возвращает ассоциативный массив с потомками конкретного узла

### JavaScript

[](#javascript)

- `var tb = new TreeBuilder();` - Вызов конструктора
- `tb.setData(data);` - Установка массива с данными
- `tb.getTree();` - Возвращает новый массив с объектами
- `tb.showTree();` - Создает дерево в формате html (ul -&gt; li), из массива с объектами

```
    tb = new TreeBuilder();

    tb.setData([
        {
            id        : 1,
            title     : 'Electronics',
            parent    : 0
        },
        {
            id        : 2,
            title     : 'Audio',
            parent    : 1
        }
    ]);

    console.log( tb.getTree() );        // array
    document.write( tb.showTree() );    // ElectronicsAudio
```

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2674d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/d74457e88fe9de541d38d67a60fe4d53b1dbd3f6276b47cdae737a2a10e72748?d=identicon)[artnv](/maintainers/artnv)

---

Top Contributors

[![artnv](https://avatars.githubusercontent.com/u/7407251?v=4)](https://github.com/artnv "artnv (18 commits)")

---

Tags

adjacency-listbuildercategoriesjavascriptmenuphptreetree-structuretreeslibrarytreeadjacency list

### Embed Badge

![Health badge](/badges/artnv-tree-builder/health.svg)

```
[![Health](https://phpackages.com/badges/artnv-tree-builder/health.svg)](https://phpackages.com/packages/artnv-tree-builder)
```

###  Alternatives

[knplabs/knp-menu

An object oriented menu library

1.4k55.8M287](/packages/knplabs-knp-menu)[cuyz/valinor

Dependency free PHP library that helps to map any input into a strongly-typed structure.

1.5k9.2M108](/packages/cuyz-valinor)[league/iso3166

ISO 3166-1 PHP Library

69536.3M116](/packages/league-iso3166)[dekor/php-array-table

PHP Library for printing associative arrays as text table (similar to mysql terminal console)

296.6M2](/packages/dekor-php-array-table)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
