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