Tach auch,
ich habe eine DB-Tabelle mit den 3 Spalten id(INT), parent_id(INT), number(VARCHAR). Ziel der Tabelle ist es einträge zu verwalten, die auf einträge in der selben Tabelle verweisen, so das die Tabelle eigentlich eine Baumstruktur beinhaltet.
Ich stand zwar schon öfter vor dem problem der in sich referenzierenden Tabellen, da es sich bisher aber maximalen um eine Tiefe von 3 handelte, habe ich mich mit Dirty lösungen zufrieden gegeben. Mein aktuelles Projekt kann aber (theoretisch) eine Tiefe von 25 erreichen und da möchte ich nicht unbedingt 25 foreach´s ineinander verschachteln.
Hier mal ein beispiel wie ich bisher gearbeitet habe:
Array nach abfrage der DB:
Print des Arrays, nachdem anhand der parent_id, jeder eintrag einem parent als child zugewiesen wurde:
Ausgabe der Inhalte des Arrays:
Ausgabe:
Mein Problem besteht also darin das ich zur ausgabe dann theoretisch 25 ineinander verschachtelte foreach´s benötigen würde. Was natürlich vollkommener schwachsinn ist.
nachdem ich mich jetzt über 3 Stunden mit dem problem beschäftige und mittlerweile kopfschmezen bekomme wenn ich nur an eines der Code Fragmente oben denke, würde ich mich freuen wenn mir jemand helfen würde (Sowohl bei dir findung einer lösung als auch auf der Suche nach einem geeigneten Titel).
Danke & Gruß
Squall
ich habe eine DB-Tabelle mit den 3 Spalten id(INT), parent_id(INT), number(VARCHAR). Ziel der Tabelle ist es einträge zu verwalten, die auf einträge in der selben Tabelle verweisen, so das die Tabelle eigentlich eine Baumstruktur beinhaltet.
Ich stand zwar schon öfter vor dem problem der in sich referenzierenden Tabellen, da es sich bisher aber maximalen um eine Tiefe von 3 handelte, habe ich mich mit Dirty lösungen zufrieden gegeben. Mein aktuelles Projekt kann aber (theoretisch) eine Tiefe von 25 erreichen und da möchte ich nicht unbedingt 25 foreach´s ineinander verschachteln.
Hier mal ein beispiel wie ich bisher gearbeitet habe:
Array nach abfrage der DB:
PHP-Code:
$a = array(
0 => array(
'id' => 1,
'number' => '1',
'parent_id' => 0
),
1 => array(
'id' => 2,
'number' => '1.1',
'parent_id' => 1
),
2 => array(
'id' => 3,
'number' => '1.1.1',
'parent_id' => 2
),
3 => array(
'id' => 4,
'number' => '1.1.2',
'parent_id' => 2
),
4 => array(
'id' => 5,
'number' => '1.1.3',
'parent_id' => 2
),
5 => array(
'id' => 6,
'number' => '1.2',
'parent_id' => 1
),
6 => array(
'id' => 7,
'number' => '1.2.1',
'parent_id' => 6
),
7 => array(
'id' => 8,
'number' => '1.2.2',
'parent_id' => 6
),
8 => array(
'id' => 9,
'number' => '2',
'parent_id' => 0
),
9 => array(
'id' => 10,
'number' => '2.1',
'parent_id' => 9
),
10 => array(
'id' => 11,
'number' => '2.1.1',
'parent_id' => 10
),
11 => array(
'id' => 12,
'number' => '2.2',
'parent_id' => 9
),
12 => array(
'id' => 13,
'number' => '2.2.1',
'parent_id' => 12
),
13 => array(
'id' => 14,
'number' => '2.2.2',
'parent_id' => 12
),
14 => array(
'id' => 15,
'number' => '2.2.3',
'parent_id' => 12
),
15 => array(
'id' => 16,
'number' => '2.2.4',
'parent_id' => 12
)
);
PHP-Code:
$a = array(
0 => array(
'number' => '1',
'childs' => array(
0 => array(
'number' => '1.1',
'childs' => array(
0 => array(
'number' => '1.1.1'
),
1 => array(
'number' => '1.1.2'
),
2 => array(
'number' => '1.1.3'
)
)
),
1 => array(
'number' => '1.2',
'childs' => array(
0 => array(
'number' => '1.2.1'
),
1 => array(
'number' => '1.2.2'
)
)
)
)
),
1 => array(
'number' => '2',
'childs' => array(
0 => array(
'number' => '2.1',
'childs' => array(
0 => array(
'number' => '2.1.1'
)
)
),
1 => array(
'number' => '2.2',
'childs' => array(
0 => array(
'number' => '2.2.1'
),
1 => array(
'number' => '2.2.2'
),
2 => array(
'number' => '2.2.3'
),
3 => array(
'number' => '2.2.4'
)
)
)
)
)
);
PHP-Code:
foreach($a as $b) {
print $b['number'] . '<br/>';
foreach($b['childs'] as $c) {
print $c['number'] . '<br/>';
foreach($c['childs'] as $d) {
print $d['number'] . '<br/>';
}
}
}
PHP-Code:
1
1.1
1.1.1
1.1.2
1.1.3
1.2
1.2.1
1.2.2
2
2.1
2.1.1
2.2
2.2.1
2.2.2
2.2.3
2.2.4
nachdem ich mich jetzt über 3 Stunden mit dem problem beschäftige und mittlerweile kopfschmezen bekomme wenn ich nur an eines der Code Fragmente oben denke, würde ich mich freuen wenn mir jemand helfen würde (Sowohl bei dir findung einer lösung als auch auf der Suche nach einem geeigneten Titel).
Danke & Gruß
Squall
Kommentar