将数组值从父项复制到子项

Copy array values from parent to children

我有一个树结构数组:

array(
    array(
        'id' => 0,
        'tags' => array('q', 'w', 'e', 'r'),
        'children' => array(
            array(
                'id' => 1,
                'tags' => array(),
                'children' => array(
                    array(
                       'id' => 2,
                       'tags' => array(),
                    )
                )
            )
        )
    ),
    array(
        'id' => 0,
        'tags' => array('q', 'w', 'e', 'r'),
        'children' => array(
            array(
               'id' => 3,
               'tags' => array(),
            )
        )
    ),  
);

如果子标签为空,我想将父标签复制到子标签。

array(
    array(
        'id' => 0,
        'tags' => array('q', 'w', 'e', 'r'),
        'children' => array(
            'id' => 1,
            'tags' = >array('q', 'w', 'e', 'r'),
            'children' => array(
                array(
                   'id' => 2,
                   'tags' => array('q', 'w', 'e', 'r'),
                )
            )
        )
    ),
    array(
        'id' => 0,
        'tags' => array('Q', 'B', 'G', 'T'),
        'children' => array(
            array(
                'id' => 3,
                'tags' => array('1', '2', '3', '4'),
                'children' => array(
                    array(
                        'id' => 4,
                        'tags' => array('1', '2', '3', '4'), 
                    )  
                )
            )
        )
    ),  
);

我试过写一个递归函数来解决这个问题,但是现在我没有任何想法去做。

编辑:经过几个小时的工作,我想出了解决方案。

function inheritTags(&$tree, $parentNode = array())
{
    foreach ($tree as &$item){
        if (empty($item['tags']))
            $item['tags'] = isset($parentNode['tags']) ? $parentNode['tags'] : array();;

        if (!empty($item['children']))
            inheritTags($item['children'], $item);
    }
}

inheritTags($tree);