code: private function fromArray(array $data, $name = null)
      {
          $name = isset($data['name']) ? $data['name'] : $name;
  
          if (isset($data['children'])) {
              $children = $data['children'];
              unset($data['children']);
          } else {
              $children = array();
          }
  
          $item = $this->factory->createItem($name, $data);
  
          foreach ($children as $name => $child) {
              $item->addChild($this->fromArray($child, $name));
          }
  
          return $item;
      }
docs: @param array       $data
  @param string|null $name (the name of the item, used only if there is no name in the data themselves)
  
  @return ItemInterface