protected function getStructureType(string $structure, int $lvl) : array
    {
        $structureType = "";
        $dataType = "";


        if ($structure === "mixed" || $structure === "?mixed") {
            $structureType .= "nullable-";
            $structure = "mixed";
        } elseif (strpos($structure, "?") === 0) {
            $structureType .= "nullable-";
            $structure = substr($structure, 1, (strlen($structure) - 1));
        }


        if ($this->isStructureASingleType($structure) === true) {
            $structureType .= "type";
            $dataType = "type";
        } elseif ($this->isStructureAnCommomArray($structure) === true) {
            $structureType .= "array";

            // Remove os "[]"
            $structure = substr($structure, 1, (strlen($structure) - 2));
            if ($this->isStructureASingleType($structure) === true ||
                $this->isStructureAnArrayOfTypes($structure, $lvl) === true) {
                $dataType = "array-of-types";
            } elseif ($this->isStructureAnAssocArray($structure, $lvl) === true) {
                $dataType = "array-assoc";
            }
        }


        // Tratando-se de uma definição de um tipo
        if (($structureType === "type" || $structureType === "nullable-type") && $this->validateType($structure) === false) {
            $structureType = "";
            $dataType = "";
        }


        return [
            "structureType"     => $structureType,
            "dataType"          => $dataType,
            "internalStructure" => $structure
        ];
    }
protected function getStructureType(string $structure, int $lvl) : array
    {
        $structureType = "";
        $dataType = "";


        if ($structure === "mixed" || $structure === "?mixed") {
            $structureType .= "nullable-";
            $structure = "mixed";
        } elseif (strpos($structure, "?") === 0) {
            $structureType .= "nullable-";
            $structure = substr($structure, 1, (strlen($structure) - 1));
        }


        if ($this->isStructureASingleType($structure) === true) {
            $structureType .= "type";
            $dataType = "type";
        } elseif ($this->isStructureAnCommomArray($structure) === true) {
            $structureType .= "array";

            // Remove os "[]"
            $structure = substr($structure, 1, (strlen($structure) - 2));
            if ($this->isStructureASingleType($structure) === true ||
                $this->isStructureAnArrayOfTypes($structure, $lvl) === true) {
                $dataType = "array-of-types";
            } elseif ($this->isStructureAnAssocArray($structure, $lvl) === true) {
                $dataType = "array-assoc";
            }
        }


        // Tratando-se de uma definição de um tipo
        if (($structureType === "type" || $structureType === "nullable-type") && $this->validateType($structure) === false) {
            $structureType = "";
            $dataType = "";
        }


        return [
            "structureType"     => $structureType,
            "dataType"          => $dataType,
            "internalStructure" => $structure
        ];
    }
protected function getStructureType ( string $ structure , int $ lvl ) : array { $ structureType = "" ; $ dataType = "" ; if ( $ structure === "mixed" || $ structure === "?mixed" ) { $ structureType .= "nullable-" ; $ structure = "mixed" ; } elseif ( strpos ( $ structure , "?" ) === 0 ) { $ structureType .= "nullable-" ; $ structure = substr ( $ structure , 1 , ( strlen ( $ structure ) - 1 ) ) ; } if ( $ this -> isStructureASingleType ( $ structure ) === true ) { $ structureType .= "type" ; $ dataType = "type" ; } elseif ( $ this -> isStructureAnCommomArray ( $ structure ) === true ) { $ structureType .= "array" ; // Remove os "[]" $ structure = substr ( $ structure , 1 , ( strlen ( $ structure ) - 2 ) ) ; if ( $ this -> isStructureASingleType ( $ structure ) === true || $ this -> isStructureAnArrayOfTypes ( $ structure , $ lvl ) === true ) { $ dataType = "array-of-types" ; } elseif ( $ this -> isStructureAnAssocArray ( $ structure , $ lvl ) === true ) { $ dataType = "array-assoc" ; } } // Tratando-se de uma definição de um tipo if ( ( $ structureType === "type" || $ structureType === "nullable-type" ) && $ this -> validateType ( $ structure ) === false ) { $ structureType = "" ; $ dataType = "" ; } return [ "structureType" => $ structureType , "dataType" => $ dataType , "internalStructure" => $ structure ] ; }
Retorna o tipo de estrutura de dados que a string passada representa.

O retorno será um array associativo contendo:

<pre>
"structureType"     => [nullable-] type | array
"dataType           => type | array-of-types | array-assoc
"internalStructure  =>  Estrutura interna, removendo marcações mais
externas como ?[ ... ], ficando apenas o
conteúdo em si.
"childModel"        => Array contendo as definições para os valores
filhos da estrutura atual.
</pre>

O valor "structureType" representado por uma string vazia indica que
o tipo não é válido.

@param       string $structure
Estrutura de dados que será identificada.

@param       int $lvl
Nível de complexidade do objeto.

@return      array
Retorna o tipo de estrutura de dados que a string passada representa .