1. Go to this page and download the library: Download datastructure/tree library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
datastructure / tree example snippets
use DataStructure\Tree\Node;
use DataStructure\Tree\Tree;
// Создание узлов
$root = new Node('root', ['name' => 'Корневая категория']);
$electronics = new Node('electronics', ['name' => 'Электроника']);
$computers = new Node('computers', ['name' => 'Компьютеры']);
// Построение дерева
$root->addChild($electronics);
$electronics->addChild($computers);
// Создание дерева
$tree = new Tree($root);
// Количество узлов
echo $tree->count(); // 3
// Обход в глубину (DFS)
foreach ($tree->traverseDepthFirst() as $node) {
echo $node->getAttribute('name') . "\n";
}
// Обход в ширину (BFS)
foreach ($tree->traverseBreadthFirst() as $node) {
echo $node->getAttribute('name') . "\n";
}
// Выполнение функции для каждого узла
$tree->walk(function($node) {
$node->setAttribute('visited', true);
});
// Найти первый узел
$node = $tree->find(function($node) {
return $node->getAttribute('price') > 1000;
});
// Найти все узлы
$nodes = $tree->findAll(function($node) {
return $node->getAttribute('category') === 'electronics';
});
// Поиск по ID
$node = $tree->findById('product-123');
// Поиск по атрибуту
$nodes = $tree->findByAttribute('status', 'active');
use DataStructure\Tree\Search\SearchCriteria;
$criteria = (new SearchCriteria())
->whereAttribute('status', 'active')
->whereDepthGreaterThan(0)
->whereIsLeaf();
// Найти первый подходящий узел
$node = $tree->find($criteria->toCallable());
// Найти все подходящие узлы
$nodes = $tree->findAll($criteria->toCallable());
$criteria = new SearchCriteria();
// Поиск по ID
$criteria->whereId('node-123');
// Поиск по атрибуту
$criteria->whereAttribute('type', 'category');
// Проверка наличия атрибута
$criteria->whereHasAttribute('price');
// Поиск корневых узлов
$criteria->whereIsRoot();
// Поиск листовых узлов
$criteria->whereIsLeaf();
// Поиск по глубине
$criteria->whereDepth(2);
$criteria->whereDepthGreaterThan(1);
$criteria->whereDepthLessThan(3);
// Кастомное условие
$criteria->where(function($node) {
return str_starts_with($node->getId(), 'product-');
});
// Комбинирование условий
$criteria
->whereAttribute('status', 'active')
->whereDepthGreaterThan(0)
->where(fn($n) => $n->getAttribute('price') < 100);