vouga/tree

此包已被废弃,不再维护。未建议替代包。

管理邻接表和嵌套集合树的库

dev-master 2014-01-07 18:25 UTC

This package is not auto-updated.

Last update: 2021-06-21 14:08:14 UTC


README

此库包含一些管理邻接表和嵌套集合树的有用方法。

此库目前仍处于测试版。大部分功能正常工作,但仍需改进和基准测试。您不能使用此库修改您的树。目前,它的主要用途是将您的树从嵌套集合转换为邻接表,反之亦然。

要求

  • PHP 5.3.0 或更高版本

当前功能

  • 从您的数据库树(邻接表或嵌套集合)创建POPO(普通PHP对象)
  • 将嵌套集合转换为邻接表,反之亦然
  • 使可能“松散”的嵌套集合更加紧密。
  • 如果您还没有,可以轻松地为您的嵌套集合添加一个层级属性。
  • toArray 和 fromArray 方法,以便轻松添加和检索您的树

待办事项列表

  • 一个完整性检查器,用于检查树的完整性。主要适用于嵌套集合(例如:左右域已损坏)。
  • 添加 toNestedArray 方法,该方法将返回嵌套数组而不是平面数组。
  • 添加、移动、删除节点功能。需要对此进行一些实验以优化速度。
  • 添加一些单元测试

基本示例

<?php

include 'vendor/autoload.php';

$sample = array(
    array(
        'id' => 1005,
        'left' => 7,
        'right' => 8
    ),
	array(
		'id' => 1001,
		'left' => 1,
		'right' => 12
	),
	array(
		'id' => 1002,
		'left' => 2,
		'right' => 9
	),
	array(
		'id' => 1003,
		'left' => 3,
		'right' => 4
	),
	array(
		'id' => 1004,
		'left' => 5,
		'right' => 6
	),
);

// Create a nested set from the sample data
$nested_set = Tree\NestedSet\NestedSet::fromArray($sample);

// The sample data contains some loose left and right domains, let's tighten it up
// NOTE: This method does not do the impossible. If your tree is corrupted, this method won't help.
$nested_set->tighten();

// You now have an adjacency list from your nested set
$adjacency_list = $nested_set->convert();

// You can do the same with your adjacency list and convert it to a nested set
$nested_set2 = $adjacency_list->convert();

// Let's see how our trees look back in array format
var_dump($adjacency_list->toArray());
var_dump($nested_set->toArray());

许可证

MIT 许可证 (MIT)

版权所有 (c) 2013 Vouga Labs

在此特此授予任何获得此软件及其相关文档副本(以下简称“软件”)的人免费使用权,不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供方提供软件的人这么做,但受以下条件约束

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他方式,无论该责任是否与软件或其使用或其他方式相关。