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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法从数组中按键删除或取消设置特定的项目。相关的知识,希望对你有一定的参考价值。

以下是我的数组输出。

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
                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

)

我只想把下面的数组键从 孩子 数组中的键。

item_id
parent_comment_id
name

我已经尝试过删除,但它也从起始数组中删除,我只是想只从子数组中删除这些键。

以下是我的代码...

$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)

    $tree = array();

    foreach ($parent as $k=>$l)


        if(isset($list[$l['id']]))
            $l['children'] = createTree($list, $list[$l['id']]);
            //unset($l['item_id']);
        
        $tree[] = $l;

     
    return $tree;

答案

这只是涉及到对递归函数的轻微改变。 我添加了一个新的参数,它标志着这是否是树的基础。 在代码将新节点添加到树中之前,如果它不是base,它将先删除所需元素。

后续的调用都会传入false,来标志它是不是base调用......

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;

另一答案

你可以在子项中使用flag进行删除,比如这样。

$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;

以上是关于无法从数组中按键删除或取消设置特定的项目。的主要内容,如果未能解决你的问题,请参考以下文章

使用jquery表中的复选框从数组中删除JavaScript对象

单击时从会话数组中取消设置某些项目?

取消设置 php 参考

从 Firestore 数组中按键/值删除项目

从向量中删除取消引用的元素

无法删除 localStorage 数组项