mavmedved
12/9/2013 - 10:37 AM

Построение дерева из списка ID-Parent. (где-то взял)

Построение дерева из списка ID-Parent. (где-то взял)

<?
function makeFloatTree($arr, $sArrPrefix = 'STRUCTURE_list'){
    $arResult = array();
    foreach ($arr as $key => $sub) {
        $wo_sub = $sub;
        unset($wo_sub[$sArrPrefix]);
        $arResult[] = $wo_sub;
        if (isset($sub[$sArrPrefix])){
            $arResult = array_merge($arResult, makeFloatTree($sub[$sArrPrefix], $sArrPrefix));
        }
    }
    return $arResult;
}
?>
<?
/**
 * Построение дерева из списка ID-Parent.
 * @param array $listIdParent Исходный список
 * @param string $parent_key_name Имя ключа родителя
 * @return array Дерево.
 */
function buildIdParentTree(array $listIdParent, $parent_key_name = 'IBLOCK_SECTION_ID') {
    // Массив корневых узлов
    $rootIds = array();
    $resultArr = array();
    // Обход списка и обработка узлов.
    foreach ($listIdParent as $id => $node) {
        if ($node[$parent_key_name]) {
            // Сохранение в родительском узле ссылки на текущий.
            $listIdParent[$node[$parent_key_name]]['SUB'][$id] =& $listIdParent[$id];
        } else {
            // Сохранение ссылки на корневой элемент.
            $rootIds[] = $id;
        }
    }
    //формируем результат
    foreach ($rootIds as $id){
        $resultArr[$id] = $listIdParent[$id];
    }
    return $resultArr;
}
$tree = buildIdParentTree($arSectionsWithItems);