Перебрать многомерный массив и удалить определенные ключи
У меня есть вложенная древовидная структура, которая основана на массиве ниже:
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;
}
Его можно использовать для удаления ключа в любом месте массива, но только на основе одного, например, удалить все ключи, где «родительский» равен «23». Но мне нужно найти и удалить (сбросить) все ключи, где «basename» равно нулю И где child не является массивом или где массив пуст. Может кто-нибудь помочь мне и, возможно, настроить функцию выше?
Спасибо,