PHP - узел отображения MLM на соответствующей стороне дерева - PullRequest
0 голосов
/ 18 марта 2020

Я строю двоичное дерево в PHP. Пока все выглядит хорошо, но сейчас у меня проблема. Узел, который я разместил справа, показывает слева, когда мы поместили правый узел перед левым. Система выглядит хорошо, если мы поместим левый узел первым и правый узел после него. Вот структура моего массива php в формате json:

[{"id":"158","parent_id":"157","side":"right","username":"okamikid1"},{"id":"160","parent_id":"157","side":"left","username":"okamikid2"}]

, и я использую функцию ниже, чтобы сделать ее иерархическим представлением.

function tree($elements) {
        foreach ($elements as $row) {
            $row['children'] = array();
            $vn = "row" . $row['id'];
            ${$vn} = $row;
            if(!is_null($row['parent_id'])) {
                $vp = "parent" . $row['parent_id'];
                if(isset($data[$row['parent_id']])) {
                    ${$vp} = $data[$row['parent_id']];
                }
                else {
                    ${$vp} = array('id' => $row['parent_id'], 'username' => $row['username'], 'parent_id' => null, 'children' => array());
                    $data[$row['parent_id']] = &${$vp};
                }
                ${$vp}['children'][] = &${$vn};
                $data[$row['parent_id']] = ${$vp};
            }
            $data[$row['id']] = &${$vn};
        }
        return array_filter($data, function($elem) { return is_null($elem['parent_id']); });

    }

Выше функции, производящей эти выходные данные:

{"157":{"id":"157","username":"okamikid1","parent_id":null,"children":[{"id":"158","parent_id":"157","username":"okamikid1","children":[]},{"id":"160","parent_id":"157","username":"okamikid2","children":[]}]}}

Пожалуйста, помогите мне с функцией tree и дайте мне знать, как я могу показать узел на соответствующей стороне? Действительно спасибо за вашу помощь.

...