Como você cria uma matriz multi-dimensional de dados SQL hierarquicamente armazenados usando o método de lista de adjacência?
-
16-09-2019 - |
Pergunta
Hierarchical dados do SQL
Adjacência Lista Modelo
No meu modelo Eu tenho uma série de objetos, cada um armazenado com o seu ID de pai. Eu estou usando o modelo de lista de adjacência como meu método de hierarquia.
Todos os exemplos de lista de adjacência simplesmente saída e aí então. Nenhum tentar criar um array multi dimensional do conjunto de resultados.
---------------
| id | parent |
---------------
| 1 | NULL |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 5 |
---------------
objeto
Eu criei uma variável de matriz na minha classe chamada 'crianças' e deseja adicionar um objeto filho cada vez que eu encontrar uma criança a partir da consulta db.
Criação de um array dentro de cada objeto e armazenar os objetos subsequentes lá parece errado. Eu não posso criar a matriz de objetos separadamente? Fazendo dessa forma, pode torná-lo difícil de atravessar a matriz quando eu obtê-lo na vista.
Eu sinto que eu estou abordando este problema de forma errada?
Existe uma maneira mais inteligente de usar matrizes PHP que isso?
Solução
A matriz das crianças não tem que ser parte de uma classe; você pode sempre fazer uma árvore ad-hoc onde um nó é um hash contendo um objeto e seus filhos. Eu não sei PHP, mas seria algo parecido com:
{
object => $row1,
children => [
{
object => $row2,
children => [ ... ],
}, {
object => $row3,
children => [],
}
]
}
Outras dicas
Você precisa que ele seja um array? Uma opção poderia ser a de ter os objetos implementar uma estrutura hierárquica recursiva como esta:
http://www.php.net/~helly /php/ext/spl/classRecursiveArrayIterator.html
Você pode adicionar os objetos como criança e ainda viajar a estrutura em uma matriz-como a forma.
A documentação sobre SPL é escassa mas oferece algumas boas estruturas traversable, interfaces e classes. existem alguns bons tutoriais na web sobre isso.