/** * Remove node. * * @param TreeNode $node Node. * @return TreeNode */ public function remove(TreeNode $node) { $result = $node; unset($this->nodeList[$node->getID()]); return $result; }
/** * Recursive iteration over tree-like array. * * @param array $data Data array in the form @code array(array('$keyName'=>$key, '$parentKeyName'=>$parentKey)) @endcode. * @param TreeNode|TreeNodeList $parent Parent object. * @return TreeNodeList */ private static function iterate(array $data, $parent) { foreach ($data as $key => $value) { //Если родителем является TreeNodeList - значит мы на начальном шаге итерации и ключ - пустой, во всех других случаях - ключом является идентификатор узла родителя if ($parent instanceof TreeNodeList) { $parentKey = ''; } else { $parentKey = $parent->getID(); } if ($value[self::$parentKeyName] == $parentKey) { //добавляем узел к родителю $addedNode = $parent->add(new TreeNode($value[self::$keyName])); //удаляем из массива данных unset($data[$key]); //делаем рекурсивный вызов, передавая изменившийся набор данных, и родительский узел self::iterate($data, $addedNode); } } return $parent; }