将父级ID分配给多维数组的子级

时间:2020-04-25 23:35:14

标签: php arrays

我需要为PHP多维数组的所有子代分配父代ID。

Array
(
    [expanded] => 1
    [key] => root_1
    [title] => root
    [children] => Array
        (
            [0] => Array
                (
                    [folder] => 1
                    [key] => 34
                    [title] => YAY PROJECTS
                )

            [1] => Array
                (
                    [expanded] => 1
                    [folder] => 1
                    [key] => 6
                    [title] => Grand Designs Episodes
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [folder] => 1
                                    [key] => 8
                                    [title] => AU Episodes
                                )

                            [1] => Array
                                (
                                    [expanded] => 1
                                    [folder] => 1
                                    [key] => 7
                                    [title] => UK Episodes
                                    [children] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [folder] => 
                                                    [key] => 9
                                                    [title] => Start something
                                                )

                                            [1] => Array
                                                (
                                                    [folder] => 
                                                    [key] => 2
                                                    [title] => Grand Designs Season 10
                                                )
                                        )
                                )
                        )
                )

            [2] => Array
                (
                    [expanded] => 1
                    [folder] => 1
                    [key] => 5
                    [title] => Animations
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [folder] => 
                                    [key] => 4
                                    [title] => Futurama Episode 191
                                )

                            [1] => Array
                                (
                                    [folder] => 
                                    [key] => 3
                                    [title] => Miniscule Series 5 Ep 1
                                )

                            [2] => Array
                                (
                                    [folder] => 
                                    [key] => 1
                                    [title] => The Simpsons Episode 459
                                )
                        )
                )

            [3] => Array
                (
                    [folder] => 1
                    [key] => 11
                    [title] => Test Folder
                )

            [4] => Array
                (
                    [folder] => 1
                    [key] => 10
                    [title] => Testing
                )
        )
)

起初我以为这是微不足道的,但是我的解决方案很快就崩溃了,分配了错误的parent_id。

public function generateParentIds(array $input, $parentId = 0)
    {
        $return = [];

        foreach ($input as $key => $value) {

            if (is_array($value)) {

                $value = $this->generateParentIds($value, $parentId);

                if (isset($value['children'])) {
                    $parentId = $value['key'];
                }

                if (!is_int($key)) {
                    $return['parent_id'] = $parentId;
                }
            }

            $return[$key] = $value;
        }

        return $return;
    }

我不确定发生了什么,我做了很多研究,但找不到任何示例,因此,我非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

假设每个孩子都应该获得直系父母的key值作为其parent_id,这应该做您想要的。请注意,它修改了数组($input通过引用传递给函数,并且foreach循环使用对$child的引用),而不是尝试合并返回的值。

function generateParentIds(&$input, $parentId = 0) {
    $input['parent_id'] = $parentId;
    if (isset($input['children'])) {
        foreach ($input['children'] as &$child) {
            generateParentIds($child, $input['key']);
        }
    }
}

generateParentIds($input);

输出内容太长,无法在此处显示,但是有一个demo at 3v4l.org

相关问题