id; } if (static::isList($h)) { $results = []; foreach ($h as $v) { $results[] = static::objectsToIds($v); } return $results; } if (\is_array($h)) { $results = []; foreach ($h as $k => $v) { if (null === $v) { continue; } $results[$k] = static::objectsToIds($v); } return $results; } return $h; } /** * @param array $params * * @return string */ public static function encodeParameters($params) { $flattenedParams = self::flattenParams($params); $pieces = []; foreach ($flattenedParams as $param) { list($k, $v) = $param; $pieces[] = self::urlEncode($k) . '=' . self::urlEncode($v); } return \implode('&', $pieces); } /** * @param array $params * @param null|string $parentKey * * @return array */ public static function flattenParams($params, $parentKey = null) { $result = []; foreach ($params as $key => $value) { $calculatedKey = $parentKey ? "{$parentKey}[{$key}]" : $key; if (self::isList($value)) { $result = \array_merge($result, self::flattenParamsList($value, $calculatedKey)); } elseif (\is_array($value)) { $result = \array_merge($result, self::flattenParams($value, $calculatedKey)); } else { \array_push($result, [$calculatedKey, $value]); } } return $result; } /** * @param array $value * @param string $calculatedKey * * @return array */ public static function flattenParamsList($value, $calculatedKey) { $result = []; foreach ($value as $i => $elem) { if (self::isList($elem)) { $result = \array_merge($result, self::flattenParamsList($elem, $calculatedKey)); } elseif (\is_array($elem)) { $result = \array_merge($result, self::flattenParams($elem, "{$calculatedKey}[{$i}]")); } else { \array_push($result, ["{$calculatedKey}[{$i}]", $elem]); } } return $result; } /** * @param string $key a string to URL-encode * * @return string the URL-encoded string */ public static function urlEncode($key) { $s = \urlencode((string) $key); // Don't use strict form encoding by changing the square bracket control // characters back to their literals. This is fine by the server, and // makes these parameter strings easier to read. $s = \str_replace('%5B', '[', $s); return \str_replace('%5D', ']', $s); } public static function normalizeId($id) { if (\is_array($id)) { $params = $id; $id = $params['id']; unset($params['id']); } else { $params = []; } return [$id, $params]; } /** * Returns UNIX timestamp in milliseconds. * * @return int current time in millis */ public static function currentTimeMillis() { return (int) \round(\microtime(true) * 1000); } }