andrei
11/21/2017 - 6:25 AM

Adjacency List без рекурсии

Функция преобразует одномерный Adjacency List в многомерный вложенный массив не используя рекурсию.

function makeTree ($list)
{
    foreach ($list as $id => $item)
    {
        if ( $item->parent > 0 )
        {
            $list[$item->parent]->childs[$id] = $item;
            $list[$id] = &$list[$item->parent]->childs[$id];
        }
    }
    foreach ($list as $id => $item)
    {
        if ( $item->parent > 0 )
            unset($list[$id]);
    }

    return $list;
}