У меня есть набор организаций и членов их правления.Во всех организациях есть члены правления, и многие члены правления входят в состав правления нескольких организаций.
Я использую 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 В ответ на запрос Моя структура данных - это таблица организаций суникальные идентификаторы, таблица людей с уникальными идентификаторами, а затем таблица мостов для двух указанных организации (сущность) и персона и роль, которую человек играет в сущности.Типичное много ко многим.Никаких дополнительных плат вообще.Я сделал его изображение, которое сейчас кажется бессмысленным, но я добавлю его внизу.
Структура данных библиотеки JIT немного сумасшедшая (для меня) в том смысле, что в их группе она выглядит такпример:
Top: Nine Inch Nails
Child: Jerome Dillon
Child: Howlin Maggie (another band)
{all the bands' members and then all of their bands...}
Таким образом, организация (группа) рассматривается как личность, даже если она состоит из нескольких персон.И когда я повторяю с помощью приведенного выше кода, я получаю (я думаю) ужасное раздувание, но JSON, который он делает, работает правильно, несмотря на раздувание.
Пример JSON и Пример визуализации // Конец редактирования
![schema](https://i.stack.imgur.com/mXUR0.jpg)