Estou trabalhando em uma estrutura de matriz que será usada como fonte de dados para um modelo de relatório em um aplicativo da web.
Os dados vêm de consultas SQL relativamente complexas que retornam uma ou mais linhas como matrizes associativas unidimensionais. No caso de muitos, eles são transformados em matriz bidimensional indexada.
Os dados são complexos e, em alguns casos, há muito disso. Para salvar viagens ao banco de dados (que são extremamente caras neste cenário), estou tentando obter todos os arrays básicos (dados de banco de dados brutos de dimensão 1 e 2) e colocá-los condicionalmente em um único array profundo de cinco níveis. Organizar os dados no PHP parece ser uma idéia melhor do que usar as instruções where no SQL.
Estrutura da matriz
Array of years(
year => array of types(
types => array of information(
total => value,
table => array of data(
index => db array
)
)
)
)
Minha primeira pergunta é: essa é uma má ideia. Matrizes como essa são apropriadas para essa situação?
Se isso funcionasse, como devo proceder para preenchê-lo? Meu pensamento inicial foi superficial a profundo, mas quanto mais eu trabalho nisso, mais eu percebo que seria muito difícil abstrair as condicionais que determinam onde cada item vai na matriz. Assim, parece que a partir dos dados mais profundamente aninhados pode estar a abordagem que devo seguir.
Se isso é abuso de matriz, que alternativas existem?
Editar
Eu fui em frente com esta abordagem, aprendendo e mudando as coisas como eu fui. Mas acabei com um array final similar. O que eu aprendi em relação ao enigma superficial para profundo foi isso.
Entrei no processo pensando nas matrizes externas como o maior de um conjunto de xícaras, contendo multidões de xícaras menores que por sua vez continham outra multidão de copo menor até o último conjunto que em minha mente era água (sendo este o matriz indexada de valores do banco de dados). Arrays não são copos ...
A ideia desmoronou quando eu comecei legitimamente a desenhar as estruturas da matriz e descobri que a base dessas matrizes, as xícaras cheias de água que eu imaginara, representava muito mais dados do que aquelas grandes xícaras. Isso me levou a ver essas matrizes profundamente aninhadas como torres, com os dados indexados representando uma base de tipos, afinando até a ponta, que era a matriz contendo.
A partir daí, descobri que a melhor maneira de processar os dados era reunir os dados de fundo, conectá-los à próxima camada e subir a torre conectando cada camada à próxima camada.
Não tenho certeza se estou certo, mas sinto que entendo mais as matrizes agora do que antes.
E, definitivamente, ainda não tenho certeza se essa é a melhor solução.