【发布时间】:2018-05-07 17:32:15
【问题描述】:
我有一个这样的嵌套菜单(侧边栏):
$menu = [
'dashboard' => [
'type' => 'item',
'name' => 'bacheca',
'url' => 'home.php',
],
'administration' => [
'type' => 'header',
'name' => 'amministrazione',
'items' => [
'configuration' => [
'type' => 'item',
'name' => 'configurazione',
'url' => 'configuration.php',
],
'admins' => [
'type' => 'item',
'name' => 'amministratori',
'url' => 'admins.php',
],
'activities' => [
'type' => 'item',
'name' => 'attività',
'url' => 'activities.php',
],
],
],
'intranet' => [
'type' => 'header',
'name' => 'intranet',
'items' => [
'chiefs' => [
'type' => 'item',
'name' => 'capiarea',
'url' => 'chiefs.php',
],
'agents' => [
'type' => 'item',
'name' => 'informatori',
'url' => 'agents.php',
],
'samples' => [
'type' => 'tree',
'name' => 'campioni',
'url' => '#',
'submenu' => array_merge(
[
'dummy' => [
'type' => 'item',
'name' => 'dummy',
'url' => 'dummy.php',
],
],
[
'temperature' => [
'type' => 'item',
'name' => 'temperature',
'url' => 'temperature.php',
],
]),
],
'files' => [
'type' => 'item',
'name' => 'riferimenti normativi',
'url' => 'files.php',
],
'documents' => [
'type' => 'item',
'name' => 'documenti',
'url' => 'documents.php',
],
],
],
];
使用递归函数,我尝试在菜单中找到匹配的“项目”类型并将其返回,以供将来详细说明(不针对类型“标题”和“树”)。这是我写的递归函数:
function item($needle, $haystack, $result = []){
foreach ($haystack as $key => $value){
switch ($value['type']) {
case 'header':
if (isset($value['items'])){
item($needle, $value['items'], $result);
}
break;
case 'tree':
if (isset($value['submenu'])){
item($needle, $value['submenu'], $result);
}
break;
default:
if ($needle == $key){
$result['name'] = $value['name'];
$result['url'] = $value['url'];
return $result;
}
}
}
}
我不知道为什么,这个函数什么都不返回:如果我输入 var_dump(item('chiefs')); 我希望它返回带有 chief 键的项目,但我什么也没得到
问题在于return 语句:在if ($needle == $key){ .. } 条件下我可以echo 或var_dump() 匹配数组,但是当我使用return $result 时,它会打印NULL
这是"live" script to play with:我哪里错了?
【问题讨论】: