Как найти всех родителей элемента в иерархическом (древовидном) массиве

Задача: Нужно, зная ключ элемента, найти всех его родителей

Есть массив:

$tree = array(
    '1' => array(
        '1.1' => array(),
        '1.2' => array(),
        '1.3' => array(
            '1.3.1' => array(),
            '1.3.2' => array(
                '1.3.2.1' => array(),
                '1.3.2.2' => array(),
                '1.3.2.3' => array(),
            ),
            '1.3.3' => array(),
        ),
    ),
    '2' => array(
        '2.1' => array(),
        '2.2' => array(),
    ),
    // ...
);

Реализация:

function parents($tree, $search_key, &$parents)
{
    foreach ($tree as $key => $item)
    {
        if ($key == $search_key)
        {
            return true;
        }
        else if ($item && parents($item, $search_key, $parents))
        {
            $parents[] = $key;
            return true;
        }
    }

    return false;
}

Использование:

parents($tree, '1.3.2.2', $parents);
print_r($parents);

Результат:

Array
(
    [0] => 1.3.2
    [1] => 1.3
    [2] => 1
)

код был скопирован с сайта: http://xandeadx.ru/blog/php/436

Advertisements

2 Responses to Как найти всех родителей элемента в иерархическом (древовидном) массиве

  1. Для breadcrum`ов? 🙂 Функция лакончиной вышла.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: