bonroyage/hierarchy

用于遍历层次结构并检索关系列表的工具

0.1.0 2020-11-18 15:30 UTC

This package is auto-updated.

Last update: 2024-09-18 23:56:53 UTC


README

至少需要 PHP 7.1

用法

构造函数接受两个参数

  • $entities 是包含关系的所有实体的数组。此数组的键作为关系值返回,并用于查询。
  • $branches 是包含其他实体 ID 的实体数组键的数组。

所有关系都在初始化时解析。

new Vosburch\Hierarchy( array $entities, array $branches );

要基于特定分支找到所有相关实体,请使用 relatedBy 方法。将分支键作为第一个参数,将 ID 数组作为第二个参数。它将返回所有相关 ID 的数组。

$hierarchy->relatedBy( string|int $branch, array $ids ): array;

要基于所有分支找到所有相关实体,请使用 relatedTo 方法。将实体 ID 数组作为第一个参数,可选地将分支数组作为第二个参数。

此方法还将初始 ID 作为返回值的一部分,以及这些 ID 通过提供的分支相关联的所有 ID。

如果 $branches 为空,则将使用构造函数中传入的所有分支。

$hierarchy->relatedTo( array $ids [, ?array $branches = null] ): array;

示例

$hierarchy = new Vosburch\Hierarchy([
    1 => ['children' => [2, 3]],
    2 => ['parents' => [1], 'children' => [4]],
    3 => ['parents' => [1]],
    4 => ['parents' => [2]],
], ['parents', 'children']);

$hierarchy->relatedBy('parents', [4]); // [1, 2]
$hierarchy->relatedBy('parents', [3]); // [1]
$hierarchy->relatedBy('children', [1]); // [2, 3, 4]

$hierarchy->relatedTo([1]); // [1, 2, 3, 4]
$hierarchy->relatedTo([2]); // [1, 2, 4]

无限循环

为了防止无限循环的发生,内置了安全措施。一旦实体之前被解析过,它将不再解析它。

$hierarchy = new Vosburch\Hierarchy([
    'loop1' => ['related' => ['loop2', 'loop3']],
    'loop2' => ['related' => ['loop1', 'loop3']],
    'loop3' => ['related' => ['loop1', 'loop2']],
], ['related']);

$hierarchy->relatedBy('related', ['loop1']); // ['loop2', 'loop3']

$hierarchy->relatedTo(['loop1']); // ['loop1', 'loop2', 'loop3']