Baumstruktur aus DB in Array abbilden

Aus php bar

Wechseln zu: Navigation, Suche

 /**
  * gegeben sei eine Tabelle wie folgt:
  * 
  * id | parent | name
  * -------------------
  *  1 |      0 | A
  *  2 |      0 | B
  *  3 |      0 | C
  *  4 |      1 | Aa
10  *  5 |      1 | Ab
11  *  6 |      2 | Ba
12  */
13 
14 /**
15  * @var array $items beinhaltet alle Elemente
16  */
17 $items = array();
18 
19 $result = mysql_query('SELECT * FROM `table` ORDER BY `parent`');
20 
21 while (($row = mysql_fetch_assoc($result)) !== false) {   
22     // wir wollen die IDs als Zahl und nicht als Zeichenkette
23     $row['id']     = (int) $row['id'];
24     $row['parent'] = (int) $row['parent'];
25     
26     // ablegen in unserem Array
27     $items[$row['id']] = $row;
28     
29     // verlinken mit dem Elternteil
30     $items[$row['parent']]['childs'][$row['id']] =& $items[$row['id']];
31 }
32 
33 // den gesamten Baum ausgeben
34 print_r($items[0]);
35 
36 
37 // nur den Ast mit der ID 1 ausgeben
38 print_r($items[1]);


Array
(
    [childs] => Array
        (
            [1] => Array
                (
                    [id] => 1
                    [parent] => 0
                    [name] => A
                    [childs] => Array
                        (
                            [4] => Array
                                (
                                    [id] => 4
                                    [parent] => 1
                                    [name] => Aa
                                )
                            [5] => Array
                                (
                                    [id] => 5
                                    [parent] => 1
                                    [name] => Ab
                                )
                        )
                )

            [2] => Array
                (
                    [id] => 2
                    [parent] => 0
                    [name] => B
                    [childs] => Array
                        (
                            [6] => Array
                                (
                                    [id] => 6
                                    [parent] => 2
                                    [name] => Ba
                                )
                        )
                )

            [3] => Array
                (
                    [id] => 3
                    [parent] => 0
                    [name] => C
                )
        )
)

Array
(
    [id] => 1
    [parent] => 0
    [name] => A
    [childs] => Array
        (
            [4] => Array
                (
                    [id] => 4
                    [parent] => 1
                    [name] => Aa
                )
            [5] => Array
                (
                    [id] => 5
                    [parent] => 1
                    [name] => Ab
                )
        )
)
Persönliche Werkzeuge