I have a nested menu (a sidebar) like this:
$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',
            ],
        ],
    ],
];
With a recursive function I try to find the matching 'item' type in the menu and return it, for future elaboration (types 'header' and 'tree' are not targeted). Here is the recursive function I wrote:
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;
                }
        }
    }
}
I don't know why, this function returns nothing: if I type var_dump(item('chiefs')); I expect it to return the item with chief key, but I get nothing
The problem lies in the return statement: in the if ($needle == $key){ .. } condition I can echo or var_dump() the matching array, but when I use return $result, it prints NULL
Here is a "live" script to play with: where am I wrong?
 
    