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 關注
- 122 瀏覽
添加回答
舉報