Como você cria uma matriz multi-dimensional de dados SQL hierarquicamente armazenados usando o método de lista de adjacência?

StackOverflow https://stackoverflow.com/questions/1273972

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top