gpt4 book ai didi

php - 通过相关实体正确递归

转载 作者:可可西里 更新时间:2023-10-31 22:47:20 25 4
gpt4 key购买 nike

我有一组组织及其董事会成员。所有组织都有董事会成员,而且许多董事会成员在不止一个组织的董事会任职。

我正在使用 JIT Hypertree来说明他们的关系。 JIT Hypertree 模式要求一个项目是所有项目的父级,并基于单个 JSON 数组绘制。

我希望重新居中事件查询并根据更改重新填充图形。那么 2 个级别就可以了,但我还不知道该怎么做。

我目前的代码从起始组织手动递归三个级别,但我想要的是递归所有相关记录。

所以它会从一个 Org 开始,然后添加 Org 的子数组(董事会成员)。然后为每个董事会成员获取所有董事会(当前组织除外),并将它们添加为董事会成员的子级。

这将一直持续到每个线索死胡同 - 大概是在一个只属于一个董事会的董事会成员处。

有人对如何创建这个数组并避免重复有任何建议吗?

$board = $center->board();

$top['id'] = $center->ID;
$top['name'] = $center->Org;
$top['children'] = array();
if ($board) {
foreach ($board as $b) {
$child['id'] = $b->ID;
$child['name'] = (strlen(trim($b->Last)) > 0) ? $b->First . ' ' . $b->Last : 'Unknown';
$child['data']['orgname'] = $center->Org;
$child['data']['relation'] = $b->Role;
$child['data']['occupation'] = $b->Occupation;
$child['children'] = array();
$childboards = $b->boards();
if ($childboards) { foreach ($childboards as $cb) {
$gchild['id'] = $cb->ID;
$gchild['name'] = $cb->Org;
$gchild['data']['orgname'] = (strlen(trim($b->Last)) > 0) ? $b->First . ' ' . $b->Last : 'Unknown';
$gchild['children'] = array();
$childboardmembers = $cb->board();
if ($childboardmembers) { foreach ($childboardmembers as $cbm) {
$ggchild['id'] = $cbm->ID;
$ggchild['name'] = (strlen(trim($cbm->Last)) > 0) ? $cbm->First . ' ' . $cbm->Last : 'Unknown';
$ggchild['data']['orgname'] = $cb->Org;
$ggchild['data']['relation'] = $cbm->Role;
$ggchild['data']['occupation'] = $cbm->Occupation;
$ggchild['children'] = array();
$gchild['children'][]= $ggchild;
}}
$child['children'][]= $gchild;
}}
$top['children'][] = $child;
}
}
$top['data'] = array();
$top['data']['description'] = $center->Desc;
echo json_encode($top);

//编辑 2011.10.24 在 Re hakre 回复我的数据结构是一个具有唯一 ID 的组织表,一个具有唯一 ID 的人员表,然后是两个指定组织(实体)和人员以及人员在实体中扮演的角色的桥接表。典型的多对多。根本没有子板。我制作了它的图像,现在看起来有点毫无意义,但我会在底部添加它。

JIT 库数据结构(对我来说)有点疯狂,因为在他们的乐队示例中它是这样的:

Top: Nine Inch Nails
Child: Jerome Dillon
Child: Howlin Maggie (another band)
{all the bands' members and then all of their bands...}

所以组织(乐队)被视为一个人,即使它由许多人组成。当我递归使用上面的代码时,我得到(我认为)可怕的膨胀但它制作的 JSON 尽管膨胀但仍能正常工作。

示例 JSONExample Visualization//结束编辑

schema

最佳答案

您的问题很难回答,因为您的数据结构主要是未知的。

对于图形表示,如果我理解正确,您只需要提供简单的关系:

*- Parent
+- Child
+- Child
...
`- Child

你的数据结构有不同的格式,我不知 Prop 体但它是这样的:

Org <-- 1:n --> Board

Board <-- n:n --> Board # If you have sub-boards

Board <-- n:n --> Member

无论您的数据以何种方式表示,要将您的数据映射或转置到图形表示所需的结构上,您都需要一些函数来处理这个问题。

为此,您需要在两个键和特定键之间共享分类/类型,以便您可以从事件中查找所需的数据以返回数据。例如:

if (request_parent_is_org())
{
$id = request_parent_id();
$parent = data_get_board($id);
$parent->addChildrent(data_get_board_children($id));
}
else
{
... # All the other decisions you need to take based on request type
}

view_response_to_json($parent);

关于php - 通过相关实体正确递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com