简体   繁体   English

创建父子数组PHP

[英]Creating parent-child array PHP

I have this flat array that I am trying to turn into a parent-child array: 我有一个平面数组,我试图将其转换为父子数组:

Array
(
    [0] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze7b2e
        )

    [1] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_czeg8ay
        )

    [2] => Array
        (
            [parent_id] => t1_czeg8ay
            [id] => t1_czet481
        )

    [3] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze4whs
        )

    [4] => Array
        (
            [parent_id] => t1_cze4whs
            [id] => t1_cze9v0o
        )

    [5] => Array
        (
            [parent_id] => t1_cze9v0o
            [id] => t1_czec4vd
        )

    [6] => Array
        (
            [parent_id] => t1_czec4vd
            [id] => t1_czep9e2
        )

    [7] => Array
        (
            [parent_id] => t1_czep9e2
            [id] => t1_czf2k8e
        )

    [8] => Array
        (
            [parent_id] => t1_czec4vd
            [id] => t1_czeixa7
        )

    [9] => Array
        (
            [parent_id] => t1_cze9v0o
            [id] => t1_czecx26
        )

    [10] => Array
        (
            [parent_id] => t1_czecx26
            [id] => t1_czeenuz
        )

    [11] => Array
        (
            [parent_id] => t1_czeenuz
            [id] => t1_czeftkf
        )

    [12] => Array
        (
            [parent_id] => t1_czecx26
            [id] => t1_czehjrz
        )

    [13] => Array
        (
            [parent_id] => t1_czecx26
            [id] => t1_czeien4
        )

    [14] => Array
        (
            [parent_id] => t1_cze9v0o
            [id] => t1_czebugl
        )

    [15] => Array
        (
            [parent_id] => t1_cze4whs
            [id] => t1_cze9hvb
        )

    [16] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze3vku
        )

    [17] => Array
        (
            [parent_id] => t1_cze3vku
            [id] => t1_czemk0g
        )

    [18] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_czeedh9
        )

    [19] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_czeenjx
        )

    [20] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze5r5u
        )

    [21] => Array
        (
            [parent_id] => t1_cze5r5u
            [id] => t1_czefle4
        )

    [22] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze8oht
        )

    [23] => Array
        (
            [parent_id] => t1_cze8oht
            [id] => t1_czelwvs
        )

    [24] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze5cs6
        )

    [25] => Array
        (
            [parent_id] => t1_cze5cs6
            [id] => t1_czefydi
        )

    [26] => Array
        (
            [parent_id] => t1_cze5cs6
            [id] => t1_czedpml
        )

    [27] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze42aq
        )

    [28] => Array
        (
            [parent_id] => t1_cze42aq
            [id] => t1_cze8iei
        )

    [29] => Array
        (
            [parent_id] => t1_cze8iei
            [id] => t1_czebkgk
        )
    [30] => Array
        (
            [parent_id] => t1_czebkgk
            [id] => t1_czedid2
        )
    [31] => Array
        (
            [parent_id] => t1_cze8iei
            [id] => t1_czebqgn
        )
    [32] => Array
        (
            [parent_id] => t1_cze42aq
            [id] => t1_cze77xr
        )
    [33] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_czen20j
        )
)

Here is my recursive function that maps the ids and makes it into a parent-child array: 这是我的递归函数,它映射id并将其放入父子数组:

function buildTree(array $elements, $parentId = 0) {
    $branch = array();

    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[] = $element;
        }
    }

    return $branch;
}

Here is the output I am getting from the above function: 这是我从上述功能获得的输出:

Array
(
    [0] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze7b2e
        )

    [1] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_czeg8ay
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_czeg8ay
                            [id] => t1_czet481
                        )

                )

        )

    [2] => Array
        (
            [parent_id] => t1_czeg8ay
            [id] => t1_czet481
        )

    [3] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze4whs
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_cze4whs
                            [id] => t1_cze9v0o
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [parent_id] => t1_cze9v0o
                                            [id] => t1_czec4vd
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [parent_id] => t1_czec4vd
                                                            [id] => t1_czep9e2
                                                            [children] => Array
                                                                (
                                                                    [0] => Array
                                                                        (
                                                                            [parent_id] => t1_czep9e2
                                                                            [id] => t1_czf2k8e
                                                                        )

                                                                )

                                                        )

                                                    [1] => Array
                                                        (
                                                            [parent_id] => t1_czec4vd
                                                            [id] => t1_czeixa7
                                                        )

                                                )

                                        )

                                    [1] => Array
                                        (
                                            [parent_id] => t1_cze9v0o
                                            [id] => t1_czecx26
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [parent_id] => t1_czecx26
                                                            [id] => t1_czeenuz
                                                            [children] => Array
                                                                (
                                                                    [0] => Array
                                                                        (
                                                                            [parent_id] => t1_czeenuz
                                                                            [id] => t1_czeftkf
                                                                        )

                                                                )

                                                        )

                                                    [1] => Array
                                                        (
                                                            [parent_id] => t1_czecx26
                                                            [id] => t1_czehjrz
                                                        )

                                                    [2] => Array
                                                        (
                                                            [parent_id] => t1_czecx26
                                                            [id] => t1_czeien4
                                                        )

                                                )

                                        )

                                    [2] => Array
                                        (
                                            [parent_id] => t1_cze9v0o
                                            [id] => t1_czebugl
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [parent_id] => t1_cze4whs
                            [id] => t1_cze9hvb
                        )

                )

        )

    [4] => Array
        (
            [parent_id] => t1_cze4whs
            [id] => t1_cze9v0o
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_cze9v0o
                            [id] => t1_czec4vd
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [parent_id] => t1_czec4vd
                                            [id] => t1_czep9e2
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [parent_id] => t1_czep9e2
                                                            [id] => t1_czf2k8e
                                                        )

                                                )

                                        )

                                    [1] => Array
                                        (
                                            [parent_id] => t1_czec4vd
                                            [id] => t1_czeixa7
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [parent_id] => t1_cze9v0o
                            [id] => t1_czecx26
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [parent_id] => t1_czecx26
                                            [id] => t1_czeenuz
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [parent_id] => t1_czeenuz
                                                            [id] => t1_czeftkf
                                                        )

                                                )

                                        )

                                    [1] => Array
                                        (
                                            [parent_id] => t1_czecx26
                                            [id] => t1_czehjrz
                                        )

                                    [2] => Array
                                        (
                                            [parent_id] => t1_czecx26
                                            [id] => t1_czeien4
                                        )

                                )

                        )

                    [2] => Array
                        (
                            [parent_id] => t1_cze9v0o
                            [id] => t1_czebugl
                        )

                )

        )

    [5] => Array
        (
            [parent_id] => t1_cze9v0o
            [id] => t1_czec4vd
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_czec4vd
                            [id] => t1_czep9e2
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [parent_id] => t1_czep9e2
                                            [id] => t1_czf2k8e
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [parent_id] => t1_czec4vd
                            [id] => t1_czeixa7
                        )

                )

        )

    [6] => Array
        (
            [parent_id] => t1_czec4vd
            [id] => t1_czep9e2
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_czep9e2
                            [id] => t1_czf2k8e
                        )

                )

        )

    [7] => Array
        (
            [parent_id] => t1_czep9e2
            [id] => t1_czf2k8e
        )

    [8] => Array
        (
            [parent_id] => t1_czec4vd
            [id] => t1_czeixa7
        )

    [9] => Array
        (
            [parent_id] => t1_cze9v0o
            [id] => t1_czecx26
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_czecx26
                            [id] => t1_czeenuz
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [parent_id] => t1_czeenuz
                                            [id] => t1_czeftkf
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [parent_id] => t1_czecx26
                            [id] => t1_czehjrz
                        )

                    [2] => Array
                        (
                            [parent_id] => t1_czecx26
                            [id] => t1_czeien4
                        )

                )

        )

    [10] => Array
        (
            [parent_id] => t1_czecx26
            [id] => t1_czeenuz
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_czeenuz
                            [id] => t1_czeftkf
                        )

                )

        )

    [11] => Array
        (
            [parent_id] => t1_czeenuz
            [id] => t1_czeftkf
        )

    [12] => Array
        (
            [parent_id] => t1_czecx26
            [id] => t1_czehjrz
        )

    [13] => Array
        (
            [parent_id] => t1_czecx26
            [id] => t1_czeien4
        )

    [14] => Array
        (
            [parent_id] => t1_cze9v0o
            [id] => t1_czebugl
        )

    [15] => Array
        (
            [parent_id] => t1_cze4whs
            [id] => t1_cze9hvb
        )

    [16] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze3vku
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_cze3vku
                            [id] => t1_czemk0g
                        )

                )

        )

    [17] => Array
        (
            [parent_id] => t1_cze3vku
            [id] => t1_czemk0g
        )

    [18] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_czeedh9
        )

    [19] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_czeenjx
        )

    [20] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze5r5u
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_cze5r5u
                            [id] => t1_czefle4
                        )

                )

        )

    [21] => Array
        (
            [parent_id] => t1_cze5r5u
            [id] => t1_czefle4
        )

    [22] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze8oht
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_cze8oht
                            [id] => t1_czelwvs
                        )

                )

        )

    [23] => Array
        (
            [parent_id] => t1_cze8oht
            [id] => t1_czelwvs
        )

    [24] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze5cs6
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_cze5cs6
                            [id] => t1_czefydi
                        )

                    [1] => Array
                        (
                            [parent_id] => t1_cze5cs6
                            [id] => t1_czedpml
                        )

                )

        )

    [25] => Array
        (
            [parent_id] => t1_cze5cs6
            [id] => t1_czefydi
        )

    [26] => Array
        (
            [parent_id] => t1_cze5cs6
            [id] => t1_czedpml
        )

    [27] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_cze42aq
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_cze42aq
                            [id] => t1_cze8iei
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [parent_id] => t1_cze8iei
                                            [id] => t1_czebkgk
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [parent_id] => t1_czebkgk
                                                            [id] => t1_czedid2
                                                        )

                                                )

                                        )

                                    [1] => Array
                                        (
                                            [parent_id] => t1_cze8iei
                                            [id] => t1_czebqgn
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [parent_id] => t1_cze42aq
                            [id] => t1_cze77xr
                        )

                )

        )

    [28] => Array
        (
            [parent_id] => t1_cze42aq
            [id] => t1_cze8iei
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_cze8iei
                            [id] => t1_czebkgk
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [parent_id] => t1_czebkgk
                                            [id] => t1_czedid2
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [parent_id] => t1_cze8iei
                            [id] => t1_czebqgn
                        )

                )

        )

    [29] => Array
        (
            [parent_id] => t1_cze8iei
            [id] => t1_czebkgk
            [children] => Array
                (
                    [0] => Array
                        (
                            [parent_id] => t1_czebkgk
                            [id] => t1_czedid2
                        )

                )

        )

    [30] => Array
        (
            [parent_id] => t1_czebkgk
            [id] => t1_czedid2
        )

    [31] => Array
        (
            [parent_id] => t1_cze8iei
            [id] => t1_czebqgn
        )

    [32] => Array
        (
            [parent_id] => t1_cze42aq
            [id] => t1_cze77xr
        )

    [33] => Array
        (
            [parent_id] => t3_42yrg7
            [id] => t1_czen20j
        )

)

While the first part of it is correct, it sometimes labels the child arrays as a parent after mapping it correctly the first time. 尽管它的第一部分是正确的,但有时它会在第一次正确映射后将子数组标记为父数组。 Why are some child arrays being mapped as a parent? 为什么将某些子数组映射为父数组?

Edit: I'm an idiot, when I calling buildTree() I was not passing in a parentId and just left the value as zero. 编辑:我是个白痴,当我调用buildTree()我没有传递parentId,而只是将值保留为零。

I don't know what you want exactly but I have added my code to separate parent and children in array. 我不知道您到底想要什么,但是我添加了我的代码以将父级和子级数组分开。 Please check below code: 请检查以下代码:

function buildTree($elements = array()) {
    $branch = array();
    if(!empty($elements))
    {
        foreach ($elements as $element) {
            if(!isset($branch[$element['parent_id']]))
            {
                $branch['parent_id'][]=$element['parent_id'];
                $branch[$element['parent_id']]=array();
                $branch[$element['parent_id']]['children'][]=$element['id'];
            }
            else
            {
                $branch[$element['parent_id']]['children'][]=$element['id'];
            }
        }
    }
    return $branch;
}
$arr_rtn = buildTree($arr);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM