• Как работает функция построения дерева?

    Decadal
    @Decadal
    if(!$node['parent']) {
          $tree[$id] = &$node;
        }

    если у текущего элемента нет предка, значит, вы помещаете текущий элемент в $tree по ссылке. То есть, изменение этого элемента в $tree повлияет на $dataset и наоборот, изменив этот элемент в dataset вы измените tree.
    рекомендую заменить первую строку в фрагменте кода, который я выделил, на if(!isset($node['parent'])) {
    далее:
    $dataset[$node['parent']]['childs'][$id] = &$node;

    если предок есть (то есть, это не рутовый элемент), вы добавляете в изначальный dataset информацию о том, что у его элемента, идентификатор которого равен предку текущего элемента, есть child, и заносите туда текущий элемент. Поскольку перед этим вы сохранили в tree элемент node по ссылке, то эта операция также изменит и структуру переменной tree.
    Обратите внимание, что, убрав & из выделенного фрагмента, вы получите тот же результат, что и с ним.
    Ответ написан
    1 комментарий