catalog.section.list собрать разделы в дерево

1
Алексей,
catalog.section.list собрать разделы в дерево

Изначально разделы идут одним массивом, отсортированные по LEFT_MARGIN. Если пройтись по ним в обратном порядке, можно с помощью IBLOCK_SECTION_ID (ID родителя) собрать потомков

Изначально разделы идут одним массивом, отсортированные по LEFT_MARGIN. Если пройтись по ним в обратном порядке, можно с помощью IBLOCK_SECTION_ID (ID родителя) собрать потомков

Пример кода

// Соберём в дерево
$arTree = [];
foreach ($arResult["SECTIONS"] as $i => $arSection) {
	$arTree[$arSection['ID']] = $arSection;
}

$arTree = array_reverse($arTree, true);
foreach ($arTree as $i => $arSection) {
	if ($arSection['IBLOCK_SECTION_ID'] > 0 && $arTree[$arSection['IBLOCK_SECTION_ID']]) {
		if (!$arTree[$arSection['IBLOCK_SECTION_ID']]['ITEMS']) {
			$arTree[$arSection['IBLOCK_SECTION_ID']]['ITEMS'] = [];
		}
		array_unshift($arTree[$arSection['IBLOCK_SECTION_ID']]['ITEMS'], $arTree[$arSection['ID']]);
		unset($arTree[$i]);
	}
}
$arTree = array_reverse($arTree, true);

$arResult["SECTIONS"] = $arTree;
unset($arTree);

Есть вопрос или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.

Опубликовано 5 марта 2026 | Обновлено 6 марта 2026
примеры кода, php
Поделиться
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
Изначально разделы идут одним массивом, отсортированные по LEFT_MARGIN. Если пройтись по ним в обратном порядке, можно с помощью IBLOCK_SECTION_ID (ID родителя) собрать потомков