我有一个基于下面数组的嵌套树结构:
Array
(
[1] => Array
(
[id] => 1
[parent] => 0
[name] => Startpage
[uri] => 125
[basename] => index.php
[child] =>
)
[23] => Array
(
[id] => 23
[parent] => 0
[name] => Events
[uri] => 0
[basename] =>
[child] => Array
(
[24] => Array
(
[id] => 24
[parent] => 23
[name] => Public news
[uri] => 0
[basename] =>
[child] => Array
(
[27] => Array
(
[id] => 27
[parent] => 24
[name] => Add
[uri] => 100
[basename] => news.public.add.php
[child] =>
)
[28] => Array
(
[id] => 28
[parent] => 24
[name] => Overview
[uri] => 101
[basename] => news.public.overview.php
[child] =>
)
)
)
[25] => Array
(
[id] => 25
[parent] => 23
[name] => Private news
[uri] => 0
[basename] =>
[child] => Array
(
[29] => Array
(
[id] => 29
[parent] => 25
[name] => Add
[uri] => 67
[basename] => news.private.add.php
[child] =>
)
[30] => Array
(
[id] => 30
[parent] => 25
[name] => Overview
[uri] => 68
[basename] => news.private.overview.php
[child] =>
)
)
)
[26] => Array
(
[id] => 26
[parent] => 23
[name] => Calendar
[uri] => 0
[basename] =>
[child] => Array
(
[31] => Array
(
[id] => 31
[parent] => 26
[name] => Add
[uri] => 69
[basename] => news.event.add.php
[child] =>
)
[32] => Array
(
[id] => 32
[parent] => 26
[name] => Overview
[uri] => 70
[basename] => news.event.overview.php
[child] =>
)
)
)
)
)
)
我正在寻找一个函数来循环(递归?)数组并删除一些键。
在我的系统中,我可以允许用户访问某些功能/页面,如果我拒绝访问整个“块”“事件”,则数组将如下所示:
array (
1 =>
array (
'id' => '1',
'parent' => '0',
'name' => 'Start page',
'uri' => '125',
'basename' => 'index.php',
'child' => '',
),
23 =>
array (
'id' => '23',
'parent' => '0',
'name' => 'Events',
'uri' => '0',
'basename' => NULL,
'child' =>
array (
24 =>
array (
'id' => '24',
'parent' => '23',
'name' => 'Public news',
'uri' => '0',
'basename' => NULL,
'child' => '',
),
25 =>
array (
'id' => '25',
'parent' => '23',
'name' => 'Private news',
'uri' => '0',
'basename' => NULL,
'child' => '',
),
26 =>
array (
'id' => '26',
'parent' => '23',
'name' => 'Calendar',
'uri' => '0',
'basename' => NULL,
'child' => '',
),
),
)
)
正如您在上面看到的,整个“块”“事件”现在毫无用处,因为没有与每个选项关联的页面。因此,我需要找到“basename”为空且 child 不是数组或数组为空的所有“键”并删除它们。
我在搜索网站时发现了这个功能:
function searchAndDestroy(&$a, $key, $val){
foreach($a as $k => &$v){
if(is_array($v)){
$r = searchAndDestroy($v, $key, $val);
if($r) {
unset($a[$k]);
}
} elseif ($key == $k && $val == $v) {
return true;
}
}
return false;
}
它可用于删除数组中任何位置的键,但仅基于一件事,例如删除“parent”等于“23”的所有键。但我需要找到并删除(取消设置)“basename”为空且 child 不是数组或数组为空的所有键。
任何人都可以帮助我并可能调整上面的功能吗?
谢谢你,