Построение дерева из списка 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);