<?php
|
|
|
|
namespace OSM\Element;
|
|
|
|
use OSM\Element\Member\Member;
|
|
use OSM\Element\Tag;
|
|
|
|
class Element {
|
|
|
|
public ?int $id = null;
|
|
public array $members = [];
|
|
public array $tags = [];
|
|
|
|
public static function createFromArray($array) {
|
|
assert(is_array($array));
|
|
|
|
$hasType = isset($array['type']);
|
|
assert($hasType);
|
|
|
|
$className = __NAMESPACE__.'\\'.ucfirst($array['type']);
|
|
$hasClass = class_exists($className);
|
|
|
|
$instance = new $className();
|
|
|
|
$hasId = isset($array['id']);
|
|
assert($hasId);
|
|
|
|
$instance->id = (int) $array['id'];
|
|
|
|
$hasMembers = isset($array['members']);
|
|
if ($hasMembers) {
|
|
$items = $array['members'];
|
|
foreach ($items as $item) {
|
|
$member = Member::createFromArray($item);
|
|
$instance->members[] = $member;
|
|
}
|
|
}
|
|
|
|
$hasTags = isset($array['tags']);
|
|
if ($hasTags) {
|
|
$items = $array['tags'];
|
|
foreach ($items as $itemKey => $itemValue) {
|
|
$tag = Tag::createFromValues($itemKey, $itemValue);
|
|
$instance->tags[] = $tag;
|
|
}
|
|
}
|
|
|
|
$instance->completeFromArray($array);
|
|
|
|
return $instance;
|
|
}
|
|
|
|
public function completeFromArray(array $array): static
|
|
{
|
|
return $this;
|
|
}
|
|
|
|
public function getTagValue(string $key): ?string {
|
|
$foundTags = array_filter($this->tags, function ($tag) use ($key) {
|
|
return $tag->key === $key;
|
|
});
|
|
|
|
if (count($foundTags) !== 1) {
|
|
return null;
|
|
}
|
|
|
|
$tag = reset($foundTags);
|
|
return $tag->value;
|
|
}
|
|
}
|