为了账号安全,请及时绑定邮箱和手机立即绑定

无法按键删除或取消设置数组中的特定项目

无法按键删除或取消设置数组中的特定项目

PHP
桃花长相依 2023-03-26 16:07:32
以下是我的数组输出。Array(    [0] => Array        (            [id] => 1011            [user_id] => 168            [item_id] => 831            [post_content] => My New Post 20            [parent_comment_id] => 1010            [name] => a            [children] => Array                (                    [0] => Array                        (                            [id] => 1012                            [user_id] => 168                            [item_id] => 831                            [parent_comment_id] => 1011                            [name] => a                            [children] => Array                                (                                    [0] => Array                                        (                                            [id] => 1013                                            [user_id] => 179                                            [item_id] => 831                                            [parent_comment_id] => 1012                                            [name] => a                                            [children] => Array                                                (                                                    [0] => Array                                                        (                                                            [id] => 1014                                                            [user_id] => 168                                                            [item_id] => 831                                                            [parent_comment_id] => 1013                                                            [name] => a                                                        )                                                )                                        )                                )                        )                )        ))
查看完整描述

2 回答

?
慕无忌1623718

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;

}


查看完整回答
反对 回复 2023-03-26
?
蝴蝶不菲

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;

}


查看完整回答
反对 回复 2023-03-26
  • 2 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信