59 lines
1.5 KiB
PHP
59 lines
1.5 KiB
PHP
<?php namespace CodeSpace\API;
|
|
|
|
class Parser {
|
|
|
|
private static ?array $datatypes = null;
|
|
|
|
private static function init() {
|
|
self::$datatypes = [
|
|
"str" => function ($input) {
|
|
return $input;
|
|
},
|
|
"int" => function ($input) {
|
|
if ($input === null || $input === "") return null;
|
|
return intval($input);
|
|
},
|
|
"float" => function ($input) {
|
|
if ($input === null) return null;
|
|
return floatval($input);
|
|
},
|
|
"bool" => function ($input) {
|
|
if ($input == null) return null;
|
|
return !in_array($input, ["0", "false"]);
|
|
},
|
|
"json" => function ($input) {
|
|
if ($input == null) return null;
|
|
$json = json_decode($input);
|
|
return is_array($json) ? $json : null;
|
|
}
|
|
];
|
|
}
|
|
|
|
public static function parse(array $data, ?array $params): ?array {
|
|
if ($params == null) return $data;
|
|
if (self::$datatypes == null) self::init();
|
|
$result = [];
|
|
foreach ($params as $param) {
|
|
|
|
$split1 = explode(":", $param);
|
|
$name = trim($split1[0]);
|
|
$required = true;
|
|
if (substr($name, -1) == "?") {
|
|
$required = false;
|
|
$name = substr($name, 0, -1);
|
|
}
|
|
$split2 = explode("=", trim($split1[1]));
|
|
$datatype = trim(array_shift($split2));
|
|
$default = count($split2) ? trim(implode("=", $split2)) : null;
|
|
|
|
$result[$name] = isset($data[$name]) ? $data[$name] : null;
|
|
|
|
if ($result[$name] === null && isset($default) && $default !== "") $result[$name] = $default;
|
|
$result[$name] = self::$datatypes[$datatype]($result[$name]);
|
|
if ($result[$name] === null && $required) return null;
|
|
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
} |