bonroyage / hierarchy
用于遍历层次结构并检索关系列表的工具
0.1.0
2020-11-18 15:30 UTC
Requires
- php: >=7.1
Requires (Dev)
- phpunit/phpunit: ^8.5
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']