PHP 分层数组 - 检查子值是否存在,然后将父属性值分配给其子数组

PHP hierarchical array - To check if child value is there or not, then assign parent properties value assign to its child array

我们有下面 PHP 层级数组

$arr = [
[
    'id' => 1,
    'parent_id' => 0,
    'access_type' => 'full-access',
    'child' => [
        [
            'id' => 4,
            'parent_id' => 1,
            'access_type' => '',
        ],
        [
            'id' => 5,
            'parent_id' => 1,
            'access_type' => '',
        ],
    ],
],
[
    'id' => 2,
    'parent_id' => 0,
    'access_type' => 'read',
    'child' => [
        [
            'id' => 10,
            'parent_id' => 2,
            'access_type' => 'read-write',
            'child' => [
                [
                    'id' => 11,
                    'parent_id' => 10,
                    'access_type' => '',
                ],
                [
                    'id' => 12,
                    'parent_id' => 10,
                    'access_type' => 'read',
                ],
            ],
        ],
        [
            'id' => 7,
            'parent_id' => 3,
            'access_type' => 'read-write',
        ],
    ],
],
[
    'id' => 3,
    'parent_id' => 0,
    'access_type' => 'full-access',
    'child' => [
        [
            'id' => 6,
            'parent_id' => 3,
            'access_type' => '',
            'child' => [
                [
                    'id' => 8,
                    'parent_id' => 6,
                    'access_type' => '',
                ],
                [
                    'id' => 9,
                    'parent_id' => 6,
                    'access_type' => '',
                ],
            ],
        ],
        [
            'id' => 18,
            'parent_id' => 3,
            'access_type' => '',
        ],
    ],
],
[
    'id' => 13,
    'parent_id' => 0,
    'access_type' => '',
    'child' => [
        [
            'id' => 14,
            'parent_id' => 13,
            'access_type' => 'full-access',
            'child' => [
                [
                    'id' => 15,
                    'parent_id' => 14,
                    'access_type' => '',
                ],
                [
                    'id' => 16,
                    'parent_id' => 14,
                    'access_type' => '',
                ],
            ],
        ],
        [
            'id' => 17,
            'parent_id' => 13,
            'access_type' => '',
        ],
    ],
],
];

我们需要这样的输出

我们这里有分层数组,我想显示 access_typefull-access 如果它的嵌套子项是空白。

我们已经尝试了下面的代码。

func_x($arr);

function func_x($arr, $level = 0)
{
    foreach($arr as $x)
    {
        echo str_repeat("---", $level) . " [" . $x['id'] . "] -> " . $x['access_type'] . "<br>";

        if(!empty($x['child']))
        {
            func_x($x['child'], $level+1);
        }
    } 
}

您必须将父访问类型传递给函数

func_x($arr);

function func_x($arr, $level = 0, $parentAccessType = '')
{
    foreach($arr as $x)
    {
        if($x['access_type'] == ''){
            $x['access_type'] = $parentAccessType;
        }
        echo str_repeat("---", $level) . " [" . $x['id'] . "] -> " . $x['access_type'] . "<br>";

        if(!empty($x['child']))
        {
            func_x($x['child'], $level+1, $x['access_type']);
        }
    } 
}

您可以使用以下代码:

func_x($arr);

function func_x($arr, $level = 0, $parent = '')
{
    foreach($arr as $x)
    {
        if( empty ( $x['access_type'] ) && $parent == 'full-access' ) {
            $x['access_type'] = $parent;
        }
        echo str_repeat("---", $level) . " [" . $x['id'] . "] -> " . $x['access_type'] . "<br>";

        if(!empty($x['child']))
        {
            func_x($x['child'], $level+1, $x['access_type']);
        }
    } 
}

基本上你需要将父 access_type 作为第三个参数传递给你的递归函数。

在线演示here