Блог

PHP: рекурсивный вызов для Anonymous functions

Анонимные функции, также известные как замыкания (closures), позволяют создавать функции, не имеющие определенных имен. Они наиболее полезны в качестве значений callback-параметров, но также могут иметь и множество других применений.

Пример анонимной функции:

$example = function () {
    echo $message;
};

$example('Hello World!');

Примеров использования анонимных функций много, данная задача вызвать анонимную функцию рекурсивно и следующий пример покажет как.

$menu = array(
    array(
        'title' => 'Page 1',
        'children' => array(
            array(
                'title' => 'Page 2',
            ),
            array(
                'title' => 'Page 3',
            ),
        )
    ),
    array(
        'title' => 'Page 4',
    ),
    array(
        'title' => 'Page 5',
        'children' => array(
            array(
                'title' => 'Page 6',
                'children' => array(
                    array(
                        'title' => 'Page 7',
                    ),
                ),
            ),
            array(
                'title' => 'Page 8',
            ),
        )
    ),
);

$example = function($menu, $level = 0) use(&$example) {
    foreach($menu as $key=>$item) {
        printf("%s%s<br/>", str_repeat('--', $level), $item['title']);
        if(array_key_exists('children', $item)) {
            $example($item['children'], $level+1);
        }
    }
};

$example($menu);

Результат будет:

Page 1
--Page 2
--Page 3
Page 4
Page 5
--Page 6
----Page 7
--Page 8

Проверено в PHP версии 5.6