xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Есть массив:

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

Комментарии RSS

Огромное Вам СПАСИБО!!!

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании