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

31.08.2011

Есть массив:

$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
)
Похожие записи

Комментарии

Александр
31.05.2012, 18:03

Отлично, спасибо. Очень сэкономили время.

Добавить комментарий