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

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

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

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;
	}
}
Кількість показів: 531
04.02.2021

Повернення до списку

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