使用递归PHP计算父数组

使用递归PHP计算父数组,php,arrays,recursion,Php,Arrays,Recursion,如何使用递归对父数组进行计数 这是我的数组 array ( [0] => array ( [id] => 1 [parent_id] => 0 [children] => array ( [0] => array ( [id] => 2 [p

如何使用递归对父数组进行计数

这是我的数组

array
(
    [0] => array
    (
        [id]        => 1
        [parent_id] => 0
        [children]  => array
        (
            [0] => array
            (
                [id]        => 2
                [parent_id] => 1
                [children]  => array
                (
                    [0] => array
                    (
                        [id]        => 3
                        [parent_id] => 2
                        [children]  => array
                        (
                            [0] => array
                            (
                                [id]        => 4
                                [parent_id] => 3,
                            ),

                        ),

                    ),

                ),

            )

            [1] => array
            (
                [id]        => 5
                [parent_id] => 1,
            ),

        ),

    )

    [1] => array
    (
        [id]        => 1
        [parent_id] => 0
        [children]  => array
        (
            [id]        => 2
            [parent_id] => 1
            [children]  => array
            (
                [id]        => 3
                [parent_id] => 2,
            ),

        ),

    )

    [2] => array
    (
        [id]        => 1
        [parent_id] => 0,
    ),

)
结果是我想要这样的东西

array
(
    [0] => array
    (
        [id]           => 1
        [parent_id]    => 0
        [parent_count] => 0
        [children]     => array
        (
            [0] => array
            (
                [id]           => 2
                [parent_id]    => 1
                [parent_count] => 1
                [children]     => array
                (
                    [0] => array
                    (
                        [id]           => 3
                        [parent_id]    => 2
                        [parent_count] => 2
                        [children]     => array
                        (
                            [0] => array
                            (
                                [id]           => 4
                                [parent_id]    => 3
                                [parent_count] => 3,
                            ),
                        ),
                    ),
                ),
            )
            [1] => array
            (
                [id]           => 5
                [parent_count] => 1
                [parent_id]    => 1,
            ),
        ),
    )
    [1] => array
    (
        [id]           => 1
        [parent_id]    => 0
        [parent_count] => 0
        [children]     => array
        (
            [id]           => 2
            [parent_id]    => 1
            [parent_count] => 1
            [children]     => array
            (
                [id]           => 3
                [parent_id]    => 2
                [parent_count] => 2,
            ),
        ),
    )
    [2] => array
    (
        [id]           => 1
        [parent_id]    => 0
        [parent_count] => 0,
    ),
)
这里是原始数组

$data[0] = array(
    'id'        => 1,
    'parent_id' => 0,
    'children'  => array(
        '0' => array(
            'id'        => 2,
            'parent_id' => 1,
            'children'  => array(
                '0' => array('id' => 3,
                    'parent_id'       => 2,
                    'children'        => array(
                        '0' => array(
                            'id'        => 4,
                            'parent_id' => 3,
                        ),
                    ),
                ),
            ),
        ),
        '1' => array(
            'id'        => 5,
            'parent_id' => 1,
        ),
    ),
);
$data[1] = array(
    'id'        => 1,
    'parent_id' => 0,
    'children'  => array(
        'id'        => 2,
        'parent_id' => 1,
        'children'  => array(
            'id'        => 3,
            'parent_id' => 2,
        ),
    ),
);
$data[2] = array(
    'id'        => 1,
    'parent_id' => 0,
);
这里是我的递归函数

function recursive(array $data, $count = 0)
{
    $count_parent = array();
    foreach ($data as $key => $dat) {
        if ($dat['parent_id'] == 0) {
            $data['count_parent'] = 0;
            if (isset($dat['children'])) {
                recursive($dat['children'], $count);
            }
        } else if ($dat['parent_id'] != 0 && array_key_exists('children', $dat)) {
            $count++;
            $data[$key]['count_parent'] = $count;
            if (isset($dat['children'])) {
                recursive($dat['children'], $count);
            }
        } else if ($dat['parent_id'] != 0 && !array_key_exists('children', $dat)) {
            $count++;
            $data[$key]['count_parent'] = $count;
        } else {
            $data['count_parent'] = 0;
        }
        $count_parent = $data;
    }
    return $count_parent;
}
它不起作用。我不知道如何创建递归,我是新使用这种方法的

我真的很感谢你的帮助

谢谢:)

试试这个:

<?php

function recursive(&$data, $count = 0) {
    $current_parent = "";

    foreach ($data as $key => &$dat) {
        if (is_array($dat)) {
            if ($current_parent != $dat['parent_id']) {
                $count++;
                $current_parent = $dat['parent_id'];
            }
            if ($dat['parent_id'] == 0)
                $count = 0;
            $dat['count_parent'] = $count;
        }
        if (is_array($dat) && array_key_exists('children', $dat)) {
            recursive($dat['children'], $count);
        }
    }
}

recursive($data);
echo "<pre>";
print_r($data);

请正确设置格式并尽可能缩小数组大小。您正在递归调用函数,但没有对它返回的值执行任何操作。是否需要类似于“当前深度”计数器的东西?在您的示例中
parent_id
parent_count
是相同的。是不是所有的情况都是这样?@apokryfos-ya,类似的,但我希望每个孩子都计算他们所有的父母,并为他们的父母添加新的密钥总数,很抱歉我的英语不好。。