Come si crea un array multi-dimensionale di dati SQL gerarchicamente memorizzati utilizzando il metodo lista di adiacenza?

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

Domanda

dati gerarchici da SQL

adiacenza Lista Modello

Nel mio modello ho una serie di oggetti, ognuno memorizzato con il loro id genitore. Sto usando la lista di adiacenza modello di come il mio metodo di gerarchia.

Tutti gli esempi di lista di adiacenza semplicemente uscita lì per lì. Nessuno tenta di creare un array multidimensionale dal set di risultati.

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

Oggetto

ho creato una variabile di matrice nella mia classe chiamata 'figli' e voglio aggiungere un bambino oggetto ogni volta che trovo un bambino dalla query db.

Creazione di un array all'interno di ciascun oggetto e memorizzare gli oggetti successivi ci si sente sbagliato. Non posso creare la matrice di oggetti separatamente? Facendo in questo modo può rendere difficile attraversare l'array quando ho capito nella vista.

Mi sento come se sto avvicinando a questo problema nel modo sbagliato?

C'è un modo più intelligente di utilizzare array PHP rispetto a questo?

È stato utile?

Soluzione

La matrice dei bambini non deve essere parte di una classe; si può sempre e solo fare un albero ad hoc in cui un nodo è un hash che contiene un oggetto e dei suoi figli. Non so PHP, ma sarebbe qualcosa di simile:

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

Altri suggerimenti

Avete bisogno di essere un array? Un'opzione potrebbe essere quella di avere gli oggetti implementano una struttura gerarchica ricorsiva come questo:

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

È possibile aggiungere gli oggetti come bambino e ancora percorrere la struttura in modo matrice simile.

La documentazione sulla SPL è sparsa ma fornisce alcune buone strutture attraversabili, interfacce e classi. Alcuni buoni tutorial presenti sul web su di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top