Ejemplo n.º 1
0
 /**
  * Remove node.
  *
  * @param TreeNode $node Node.
  * @return TreeNode
  */
 public function remove(TreeNode $node)
 {
     $result = $node;
     unset($this->nodeList[$node->getID()]);
     return $result;
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }