Array aufbauen aus aufeinander aufbauendem Datensatz

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Array aufbauen aus aufeinander aufbauendem Datensatz

    Hallo Leute,

    ich habe ein Problem. Und zwar habe ich eine Datenbank die wie folgt aufgebaut ist:

    PHP-Code:
    id        parent_id        name
    1        0                test1
    2        1                test2
    3        0                test3
    4        1                test4
    5        3                test5
    6        3                test6
    7        1                test7
    8        2                test8
    9        2                test9
    10        2                test10
    11        5                test11
    12        6                test12
    13        7                test13 
    Wenn ich diese nun aufrufe und durchlaufe:
    PHP-Code:
    $sql $db->query("SELECT * FROM test");
    while(
    $obj mysql_fetch_object($sql)){

    möchte ich gerne ein Array aufbauen welches wie folgt aussieht:
    PHP-Code:
    Array
    (
                [
    0] => Array
                    (
                        [
    id] => 1
                        
    [name] => test1
                        
    [subgroups] => Array
                                    (
                                        [
    0] => Array
                                            (
                                                [
    id] => 2
                                                
    [name] => test2
                                                
    [subgroups] => Array
                                                            (
                                                                [
    0] => Array
                                                                    (
                                                                        [
    id] => 8
                                                                        
    [name] => test8
                                                                    
    )
                                                                [
    1] => Array
                                                                    (
                                                                        [
    id] => 9
                                                                        
    [name] => test9
                                                                    
    )
                                                                [
    2] => Array
                                                                    (
                                                                        [
    id] => 10
                                                                        
    [name] => test10
                                                                    
    )
                                                            )
                                            )
                                        [
    1] => Array
                                            (
                                                [
    id] => 4
                                                
    [name] => test4
                                            
    )
                                        [
    2] => Array
                                            (
                                                [
    id] => 7
                                                
    [name] => test7
                                                
    [subgroups] => Array
                                                            (
                                                                [
    0] => Array
                                                                    (
                                                                        [
    id] => 13
                                                                        
    [name] => test13
                                                                    
    )
                                                            )
                                            )
                                    )
                    )
                [
    1] => Array
                    (
                        [
    id] => 3
                        
    [name] => test3
                        
    [subgroups] => Array
                                    (
                                        [
    0] => Array
                                            (
                                                [
    id] => 5
                                                
    [name] => test5
                                                
    [subgroups] => Array
                                                            (
                                                                [
    0] => Array
                                                                    (
                                                                        [
    id] => 11
                                                                        
    [name] => test11
                                                                    
    )
                                                            )
                                            )
                                        [
    1] => Array
                                            (
                                                [
    id] => 6
                                                
    [name] => test6
                                                
    [subgroups] => Array
                                                            (
                                                                [
    0] => Array
                                                                    (
                                                                        [
    id] => 12
                                                                        
    [name] => test12
                                                                    
    )
                                                            )
                                            )
                                    )
                    )

    Mit diesem Array könnte ich dann in Flash ein Struktugramm aufbauen.
    Das Problem ist nur wie komme ich von den Datenbanksätzen möglichst einfach zu einem solchem Array? Denn es können theoretisch unendlich viele Ebenen entstehen ... Wenn es nur 2-3 wären, wäre es ja kein Problem das Array halt 2-3 mal zu durchlaufen und neu zusammenzubauen, da aber nicht garantiert werden kann wieviele Ebenen entstehen muss dies irgendwie dynamisch erfolgen ... Falls von euch jemand einer eine Idee hat oder einen kleinen Gedankenanstoß wäre ich sehr dankbar!

    Viele Grüße,
    Daniel

  • #2
    Es gibt sicher verschiedene Varianten. Da ich aber davon ausgehe, dass du die Datenstruktur nicht verändern willst, machs doch einfach ganz flott so:
    PHP-Code:
    $sql $db->query("SELECT * FROM test");
    while(
    $obj mysql_fetch_object($sql)){
      
    $data[$obj->parent_id][] = $obj;

    Dann hast du alle Datensätze in einem array und zwar ihrer ParentId zugeordnet.

    Jetzt baust du in ner zweiten Schleife das richtige array auf, indem du bei 0 anfängst und alle Datensätze aus $data[0] zuordnest. Diese wiederum gehst du der reihe nach durch und ordnest die entsprechenden Unterdatensätze zu. Usw. Rekursive Sache halt.

    --
    Ansonsten könntest du dich allgemein mal mit baumstrukturen auseinander setzen und die geeignetste für dich heraussuchen.

    Kommentar


    • #3
      Hallo TobiaZ,

      Danke für das Stichwort Baumstruktur ... der 1. Treffer bei Google hat mir schon die Lösung geliefert: http://www.phpbar.de/w/Baumstruktur_...Array_abbilden

      Viele Grüße,
      Daniel
      Zuletzt geändert von MoRpH2k2; 01.05.2008, 15:37.

      Kommentar


      • #4
        Jetzt ist lediglich noch das Problem, dass die Arrays keine fortlaufenden Nummern haben sondern stattdessen die id des Eintrages verwenden. Gibt es eine Möglichkeit das Array einfach neu zu indexieren?
        PHP-Code:
        array_values $array ); 
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar

        Lädt...
        X