Создать дерево из дочернего узла - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть массив, полный таких элементов:

array(
    array(
        'id' => 1,
        'name' => 'parent 1',
        'parent_id' => null
    ),
    array(
        'id' => 2,
        'name' => 'child of parent 1',
        'parent_id' => 1
    ),
    array(
        'id' => 3,
        'name' => 'grand child of parent 1',
        'parent_id' => 2
    ),
    array(
        'id' => 4,
        'name' => 'parent 2',
        'parent_id' => null
    ),
    array(
        'id' => 5,
        'name' => 'child of parent 2',
        'parent_id' => 4
    ),
);

И мой вопрос: как я могу построить дерево для известного ребенка? Например, если я знаю, что идентификатор равен 3, мне нужно получить массив элементов, включая идентификаторы 1,2 и 3.

Спасибо.

1 Ответ

0 голосов
/ 22 ноября 2011

Может быть, вот так:

function build($tab, $id)
{
    $res = array();
    $node = $tab[$id];
    $i = 0;

    do
    {
        $res[$i] = node;
        $node = $tab[$node['parent_id']];
        $i++;
    } while( $node != null);

    return $res;

}
...