Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将父ID分配给多维数组的子级_Php_Arrays - Fatal编程技术网

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

Php 将父ID分配给多维数组的子级,php,arrays,Php,Arrays,我需要在PHP中将父ID分配给多维数组的所有子数组 Array ( [expanded] => 1 [key] => root_1 [title] => root [children] => Array ( [0] => Array ( [folder] => 1 [key] =

我需要在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
                )
        )
)

起初,我认为这相当简单,但是我的解决方案很快就崩溃了,分配了错误的父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;
    }

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

假设每个孩子都应该得到直接父母的
值作为其
父母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);

输出太长,无法在此显示,但存在一个

哪些是父ID?是将顶级父id分配给所有子代,还是每个数组都获得其直接父代的父id?您期望的输出是什么?如果不做有条件的猜测,就更容易理解。对不起,我应该澄清一下。每个孩子都需要直系父母的钥匙谢谢你,尼克!使用参考资料更有意义。@Tim不用担心,我很高兴能帮上忙。