¿Cómo se crea una matriz multidimensional de datos SQL almacenados jerárquicamente utilizando el método de lista de adyacencia?

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

Pregunta

jerárquica de datos de SQL

Adyacencia Lista Modelo

En mi modelo que tengo una serie de objetos, cada uno almacenado con su ID de padre. Estoy utilizando el modelo de lista de adyacencia como mi método de jerarquía.

Todos los ejemplos de lista de adyacencia simplemente de salida en el acto. Ninguno tratar de crear una matriz multidimensional del conjunto de resultados.

---------------
| id | parent |
---------------
| 1  | NULL   |
| 2  | 1      |
| 3  | 1      |
| 4  | 2      |
| 5  | 2      |
| 6  | 5      |
---------------

Objeto

He creado una variable de matriz en mi clase llamada 'niños' y quiere añadir un niño objeto cada vez que encuentro a un niño de la consulta db.

Creación de una matriz dentro de cada objeto y el almacenamiento de los objetos posteriores en que uno se sienta mal. ¿No puedo crear la matriz de objetos por separado? Hacerlo de esta manera puede hacer que sea difícil para atravesar la matriz cuando lo reciba en la vista.

Me siento como que estoy acercando a este problema de manera equivocada?

¿Hay una manera más inteligente de utilizar matrices de PHP que esto?

¿Fue útil?

Solución

La matriz de los niños no tiene que ser parte de una clase; siempre se puede simplemente hacer un árbol de ad-hoc, donde un nodo es un hash que contiene un objeto y sus hijos. No sé PHP, pero sería algo como:

{
    object => $row1,
    children => [
        {
            object => $row2,
            children => [ ... ],
        }, {
            object => $row3,
            children => [],
        }
    ]
}

Otros consejos

¿Es necesario que sea una matriz? Una opción podría ser que los objetos implementan una estructura jerárquica recursiva como la siguiente:

http://www.php.net/~helly /php/ext/spl/classRecursiveArrayIterator.html

Puede añadir los objetos como niño y todavía viajar la estructura de un modo similar al conjunto.

La documentación sobre SPL es escasa pero ofrece algunas buenas estructuras transitables, interfaces y clases. Existen algunos buenos tutoriales en la web al respecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top