将数组值从父项复制到子项
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);
我有一个树结构数组:
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);