private static function fromArray(Tag $tag, array $data, callable $guesser)
{
foreach ($data as $key => $value) {
if (is_array($value)) {
$isNumeric = true;
$isIntArray = true;
foreach ($value as $k => $v) {
if (!is_numeric($k)) {
$isNumeric = false;
break;
} elseif (!is_int($v)) {
$isIntArray = false;
}
}
$tag[$key] = $isNumeric ? $isIntArray ? new IntArrayTag($key, []) : new ListTag($key, []) : new CompoundTag($key, []);
self::fromArray($tag->{$key}, $value, $guesser);
} else {
$v = call_user_func($guesser, $key, $value);
if ($v instanceof Tag) {
$tag[$key] = $v;
}
}
}
}