Универсальный скрипт создания дерева из ассоциативного массива

Достаточно распространенная задача получать дерево разделов из какого-то внешнего источника и отображение их в виде дерева. В данном посте будет функция-заготовка для обработки таких вот разделов и построения дерева

Сама идея построения дерева очень проста: необходимо всем элементам найти их предков, а после этого всем предкам добавить их потомков. Реализация ниже:

class someClass{
var $arSections;  // как-то его заполняем массив
function Get1CTreeSections()
	{
		$sections = [];
		foreach ($this->arSections as $arSection)
		{
			$sections[$arSection['GUID']] = $arSection; // преобразовываем массив, 
			//чтобы ключами были обязательно прописаны уникальные идентификаторы
		}

		if(empty($sections)){
			return  false;
		}

		$this->arSections = $sections;
		unset($sections);

		$arTree = self::MakeTreeFromArray($this->arSections,false,'GUID','SGUID');
		return $arTree;
	}

	function MakeTreeFromArray($array,$key=false,$keyField='GUID',$parentKeyField='SGUID'){
		$branch = [];
		foreach ($array as &$element){
			if($element[$parentKeyField] !== null && $array[$element[$parentKeyField]]==null){
				unset($element[$parentKeyField]);
			}
			if($element[$parentKeyField]==$key){
				$children = self::MakeTreeFromArray(
					$array,
					$element[$keyField],
					$keyField,
					$parentKeyField);
				if($children){
					$element['children'] = $children;
				}
				$branch[$element[$keyField]] = $element;
				unset($element);
			}
		}
		return $branch;
	}
}
Количество показов: 1031
04.02.2021

Возврат к списку

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.