%2$s', $arr[self::NAME], $arr[self::VALUE])); self::importArr($root, $arr); return $root; } /** * @param $root * @param array $arr */ protected static function importArr(self $root, array $arr) { if (isset($arr[self::ATTR])) { foreach ($arr[self::ATTR] as $k => $v) { $root->addAttribute($k, $v); } } if (isset($arr[self::CHILDREN])) { foreach ($arr[self::CHILDREN] as $k => $v) { self::importArr($root->addChild($v[self::NAME], $v[self::VALUE]), $v); } } } public function toArray() { $result = [ self::NAME => $this->getName(), ]; $attr = $this->attributes(); if ($attr->count() > 0) { $result[self::ATTR] = []; foreach ($attr as $k => $v) { $result[self::ATTR][$k] = (string)$v; } } $children = $this->children(); if ($children->count() > 0) { $result[self::CHILDREN] = []; foreach ($children as $k => $v) { /** * @var self $v */ $result[self::CHILDREN][] = $v->toArray(); } } $result[self::VALUE] = (string)$this; return $result; } }