2 回答
TA贡献1744条经验 获得超4个赞
这只涉及对递归函数的轻微更改。我添加了一个新参数,用于标记这是否是树的基础。在代码将新节点添加到树中之前,如果它不是基础节点,它将首先删除所需的元素。
随后的调用都传入 false,以标记它不是碱基调用...
function createTree(&$list, $parent, $base = true){
$tree = array();
foreach ($parent as $k=>$l){
if(isset($list[$l['id']])){
$l['children'] = createTree($list, $list[$l['id']], false);
}
if ( ! $base ) {
unset($l['item_id']);
unset($l['parent_comment_id']);
unset($l['name']);
}
$tree[] = $l;
}
return $tree;
}
TA贡献1810条经验 获得超4个赞
您可以在子项中使用标志进行删除,如下所示:
$arr = array(
array('id'=>1011, 'user_id' => 168, 'item_id'=>831, 'post_content'=>'My New Post 20', 'parent_comment_id'=>1010, 'name'=>'a'),
array('id'=>1012,'user_id' => 168, 'item_id'=>831 ,'parent_comment_id'=>1011, 'name'=>'a'),
array('id'=>1013, 'user_id' => 179, 'item_id'=>831, 'parent_comment_id'=>1012, 'name'=>'a'),
array('id'=>1014,'user_id' => 168, 'item_id'=>831, 'parent_comment_id'=>1013, 'name'=>'a'),
);
echo "<pre> add";print_r($arr);
$new = array();
foreach ($arr as $a){
$new[$a['parent_comment_id']][] = $a;
}
$tree = createTree($new, array($arr[0]));
print_r($tree);
function createTree(&$list, $parent, $isChild = false){
$tree = array();
foreach ($parent as $k=>$l){
if(isset($list[$l['id']])){
$l['children'] = createTree($list, $list[$l['id']], true);
if ($isChild) {
unset($l['item_id']);
// unset another field
}
}
$tree[] = $l;
}
return $tree;
}
- 2 回答
- 0 关注
- 97 浏览
添加回答
举报