public static function parseSchema(array $arr) {
        $result = [];

        foreach ($arr as $key => $value) {
            if (is_int($key)) {
                if (is_string($value)) {
                    // This is a short param value.
                    $param = static::parseShortParam($value);
                    $name = $param['name'];
                    $result[$name] = $param;
                } else {
                    throw new \InvalidArgumentException("Schema at position $key is not a valid param.", 500);
                }
            } else {
                // The parameter is defined in the key.
                $param = static::parseShortParam($key, $value);
                $name = $param['name'];

                if (is_array($value)) {
                    // The value describes a bit more about the schema.
                    switch ($param['type']) {
                        case 'array':
                            if (isset($value['items'])) {
                                // The value includes array schema information.
                                $param = array_replace($param, $value);
                            } elseif (isset($value['type'])) {
                                // The value is a long-form schema.
                                $param['items'] = $value;
                            } else {
                                // The value is another shorthand schema.
                                $param['items'] = [
                                    'type' => 'object',
                                    'required' => true,
                                    'properties' => static::parseSchema($value)
                                ];
                            }
                            break;
                        case 'object':
                            // The value is a schema of the object.
                            if (isset($value['properties'])) {
                                $param['properties'] = static::parseSchema($value['properties']);
                            } else {
                                $param['properties'] = static::parseSchema($value);
                            }
                            break;
                        default:
                            $param = array_replace($param, $value);
                            break;
                    }
                } elseif (is_string($value)) {
                    if ($param['type'] === 'array') {
                        // Check to see if the value is the item type in the array.
                        if (isset(self::$types[$value])) {
                            $arrType = self::$types[$value];
                        } elseif (($index = array_search($value, self::$types)) !== false) {
                            $arrType = self::$types[$index];
                        }

                        if (isset($arrType)) {
                            $param['items'] = ['type' => $arrType, 'required' => true];
                        } else {
                            $param['description'] = $value;
                        }
                    } else {
                        // The value is the schema description.
                        $param['description'] = $value;
                    }
                }

                $result[$name] = $param;
            }
        }

        return $result;
    }
public static function parseSchema(array $arr) {
        $result = [];

        foreach ($arr as $key => $value) {
            if (is_int($key)) {
                if (is_string($value)) {
                    // This is a short param value.
                    $param = static::parseShortParam($value);
                    $name = $param['name'];
                    $result[$name] = $param;
                } else {
                    throw new \InvalidArgumentException("Schema at position $key is not a valid param.", 500);
                }
            } else {
                // The parameter is defined in the key.
                $param = static::parseShortParam($key, $value);
                $name = $param['name'];

                if (is_array($value)) {
                    // The value describes a bit more about the schema.
                    switch ($param['type']) {
                        case 'array':
                            if (isset($value['items'])) {
                                // The value includes array schema information.
                                $param = array_replace($param, $value);
                            } elseif (isset($value['type'])) {
                                // The value is a long-form schema.
                                $param['items'] = $value;
                            } else {
                                // The value is another shorthand schema.
                                $param['items'] = [
                                    'type' => 'object',
                                    'required' => true,
                                    'properties' => static::parseSchema($value)
                                ];
                            }
                            break;
                        case 'object':
                            // The value is a schema of the object.
                            if (isset($value['properties'])) {
                                $param['properties'] = static::parseSchema($value['properties']);
                            } else {
                                $param['properties'] = static::parseSchema($value);
                            }
                            break;
                        default:
                            $param = array_replace($param, $value);
                            break;
                    }
                } elseif (is_string($value)) {
                    if ($param['type'] === 'array') {
                        // Check to see if the value is the item type in the array.
                        if (isset(self::$types[$value])) {
                            $arrType = self::$types[$value];
                        } elseif (($index = array_search($value, self::$types)) !== false) {
                            $arrType = self::$types[$index];
                        }

                        if (isset($arrType)) {
                            $param['items'] = ['type' => $arrType, 'required' => true];
                        } else {
                            $param['description'] = $value;
                        }
                    } else {
                        // The value is the schema description.
                        $param['description'] = $value;
                    }
                }

                $result[$name] = $param;
            }
        }

        return $result;
    }
public static function parseSchema ( array $ arr ) { $ result = [ ] ; foreach ( $ arr as $ key => $ value ) { if ( is_int ( $ key ) ) { if ( is_string ( $ value ) ) { // This is a short param value. $ param = static :: parseShortParam ( $ value ) ; $ name = $ param [ 'name' ] ; $ result [ $ name ] = $ param ; } else { throw new \ InvalidArgumentException ( "Schema at position $key is not a valid param." , 500 ) ; } } else { // The parameter is defined in the key. $ param = static :: parseShortParam ( $ key , $ value ) ; $ name = $ param [ 'name' ] ; if ( is_array ( $ value ) ) { // The value describes a bit more about the schema. switch ( $ param [ 'type' ] ) { case 'array' : if ( isset ( $ value [ 'items' ] ) ) { // The value includes array schema information. $ param = array_replace ( $ param , $ value ) ; } elseif ( isset ( $ value [ 'type' ] ) ) { // The value is a long-form schema. $ param [ 'items' ] = $ value ; } else { // The value is another shorthand schema. $ param [ 'items' ] = [ 'type' => 'object' , 'required' => true , 'properties' => static :: parseSchema ( $ value ) ] ; } break ; case 'object' : // The value is a schema of the object. if ( isset ( $ value [ 'properties' ] ) ) { $ param [ 'properties' ] = static :: parseSchema ( $ value [ 'properties' ] ) ; } else { $ param [ 'properties' ] = static :: parseSchema ( $ value ) ; } break ; default : $ param = array_replace ( $ param , $ value ) ; break ; } } elseif ( is_string ( $ value ) ) { if ( $ param [ 'type' ] === 'array' ) { // Check to see if the value is the item type in the array. if ( isset ( self :: $ types [ $ value ] ) ) { $ arrType = self :: $ types [ $ value ] ; } elseif ( ( $ index = array_search ( $ value , self :: $ types ) ) !== false ) { $ arrType = self :: $ types [ $ index ] ; } if ( isset ( $ arrType ) ) { $ param [ 'items' ] = [ 'type' => $ arrType , 'required' => true ] ; } else { $ param [ 'description' ] = $ value ; } } else { // The value is the schema description. $ param [ 'description' ] = $ value ; } } $ result [ $ name ] = $ param ; } } return $ result ; }
Parse a schema in short form into a full schema array.

@param array $arr The array to parse into a schema.
@return array The full schema array.
@throws \InvalidArgumentException Throws an exception when an item in the schema is invalid.
Parse a schema in short form into a full schema array .