簡體   English   中英

從樹生成器獲取父級和葉級 ID

[英]Get parent and leaf ids from tree builder

我正在為我的應用程序構建一個樹功能。 我的樹有無限的層次。 我正在使用這個函數來構建我的樹(你可以在這里嘗試我的代碼https://onlinephp.io/c/a50bc ):

function build(array $array): array
{
    if (count($array) <= 0) {
        return [
            'leaf_ids'   => [],
            'parent_ids' => [],
            'tree'       => [],
        ];
    }

    $groupByParent = [];
    foreach ($array as $arr) {
        $parent_id = empty($arr['parent_id']) ? 0 : $arr['parent_id'];
        $groupByParent[$parent_id][] = $arr;
    }

    return makeTree($groupByParent, $groupByParent[0]);
}

 function makeTree(array &$parentList, array $items): array
{
    $tree = [];
    $leafIds = [];
    $parentIds = [];

    foreach ($items as $item) {
        if (isset($parentList[$item['id']])) {
            $item['children'] = makeTree($parentList, $parentList[$item['id']])['tree'];
        }

        if (!isset($item['children'])) {
            $leafIds[] = $item['id'];
        } else {
            $parentIds[] = $item['id'];
        }

        $tree[] = $item;
    }

    return ['tree' => $tree, 'leaf_ids' => $leafIds, 'parent_ids' => $parentIds];
}

$array = [
    [   
        'id' => 1,
        'parent_id' => NULL,
        'value' => 'Hi',
    ],
    [   
        'id' => 2,
        'parent_id' => NULL,
        'value' => 'Bye',
    ],
    [   
        'id' => 3,
        'parent_id' => 1,
        'value' => 'Hey',
    ],
    [   
        'id' => 4,
        'parent_id' => 1,
        'value' => 'Hello',
    ],
    [   
        'id' => 5,
        'parent_id' => 2,
        'value' => 'Cya',
    ],
    [   
        'id' => 6,
        'parent_id' => 5,
        'value' => 'Byebye',
    ],
];

print_r(json_encode(build($array), JSON_PRETTY_PRINT));

我想獲取葉子和父母的列表,但我的代碼根本不起作用。 最后,我沒有所有父母 ID,並且我的 leaf_ids 數組為空。

我得到了這個輸出:

{
    "tree": [
        {
            "id": 1,
            "parent_id": null,
            "value": "Hi",
            "children": [
                {
                    "id": 3,
                    "parent_id": 1,
                    "value": "Hey"
                },
                {
                    "id": 4,
                    "parent_id": 1,
                    "value": "Hello"
                }
            ]
        },
        {
            "id": 2,
            "parent_id": null,
            "value": "Bye",
            "children": [
                {
                    "id": 5,
                    "parent_id": 2,
                    "value": "Cya",
                    "children": [
                        {
                            "id": 6,
                            "parent_id": 5,
                            "value": "Byebye"
                        }
                    ]
                }
            ]
        }
    ],
    "leaf_ids": [],
    "parent_ids": [
        1,
        2
    ]
}

我想要的 leaf_ids 輸出是: "leaf_ids": [3,4,6]和 parent_ids: "parent_ids": [1,2,5]

我該怎么做才能返回葉子和父母名單?

當您進行遞歸調用時,您還需要合並從子樹結果中獲得的leaf_idsparent_ids的結果,如下所示:

<?php

if (isset($parentList[$item['id']])) {
    $sub_tree = makeTree($parentList, $parentList[$item['id']]);
    $item['children'] = $sub_tree['tree'];
    $leafIds = array_merge($leafIds, $sub_tree['leaf_ids']);
    $parentIds = array_merge($parentIds, $sub_tree['parent_ids']);
}

在線演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM