Verschachteltes Array aus Nested Sets

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verschachteltes Array aus Nested Sets

    Hallo,

    ich komme einfachnicht weiter. Ziel ist ein verschachteltes Array, das aus einer Nested Sets Anordnung gebildet wird.

    So sähe der Baum optisch aus:
    PHP Code:
    Lebewesen
    |
    `
    -- Säugetiere
    |   |
    |   
    `-- Primaten
    |   |   |
    |   |   `
    -- Halbaffen
    |   |   |
    |   |   
    `-- Affen
    |   |
    |   `
    -- Nagetiere
    |
    `-- Menschen
        
    |
        `
    -- Asiaten
        |
        
    `-- Afrikaner 
    Die Abfrage liefert, wie nachfolgend sortiert, diese Werte:
    PHP Code:
    id  name        level  kinder  davor  danach
    ============================================
     
    7  Lebewesen    0     8       0      0
    10  Säugetiere   1     4       1      0
     2  Primaten     2     2       1      0
     8  Halbaffen    3     0       1      0
     4  Affen        3     0       0      1
    33  Nagetiere    2     0       0      1
    52  Menschen     1     2       0      1
    22  Asiaten      2     0       1      0
    26  Afrikaner    2     0       0      1 
    "davor sagt, ob der Eintrag ein Elternelement hat, "danach" sagt ob der Eintrag Kinder hat.

    Wie kann man nun anhand dieser Werte ein verschachteltes Array bauen mit der ID als Key?
    PHP Code:
    Array
    (
      [
    7] => Array
        (
          [
    id] => 7
          
    [name] => Lebewesen
          
    [child] => Array
            (
              [
    10] => Array
                (
                  [
    id] => 10
                  
    [name] => Säugetiere
                  
    [child] => Array
                    (
                      ...
                    )
                )
              [
    52] => Array
                (
                  [
    id] => 52
                  
    [name] => Menschen
                  
    [child] => Array
                    (
                      [
    22] => Array
                        (
                          [
    id] => 22
                          
    [name] => Asiaten
                        
    )
                      [
    26] => Array
                        (
                          [
    id] => 26
                          
    [name] => Afrikaner
                        
    )
                    )
                )
            )
        )

    Gruß,
    Peter

  • #2
    Und wie soll aus deiner Anfrage ersichtlich sein, welches Element welchem untergeordnet ist?
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Comment


    • #3
      Hier steht der Level, die Reihenfolge der Ausgabe entspricht der Baumstruktur.
      PHP Code:
      id  name        level
      =====================
       
      7  Lebewesen    0
      10  Säugetiere      1
       2  Primaten         2
       8  Halbaffen          3
       4  Affen              3
      33  Nagetiere        2
      52  Menschen       1
      22  Asiaten          2
      26  Afrikaner        2 
      Da es sich um Nested Sets handelt habe ich ja keinen direkten Bezug zum Elternelement in Form einer Eltern-ID.
      Last edited by Screw Driver; 27-04-2008, 20:00.
      Gruß,
      Peter

      Comment


      • #4
        Würde es denn was bringen, wenn man noch die Parent-ID hätte? Wie macht man das dann?
        Gruß,
        Peter

        Comment


        • #5
          PHP Code:
          getchildren($parent){
           
          $a = Array();
           foreach(
          $children as $child){ /* <-- $children muss du natürlich erst 
          festlegen mit allen, die $parent als parent_id haben. eine Ebenen_id 
          (level) oder ein davor und danach brauchst du nicht, nur das Elternelement */
            
          $a[$parent] = haschildren($child) ? getchildren($child) : $child;
           }
           return 
          $a

          $tree 
          getchildren(-1); //<-- höchste Ebene ist 0, alle dieser Ebene haben parent_id -1

          Last edited by jmc; 28-04-2008, 11:35.

          Comment


          • #6
            Wie kann man nun anhand dieser Werte ein verschachteltes Array bauen mit der ID als Key?
            So was in der Art? http://tobisworld.ch/misc/test/tree_test.php
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Comment

            Working...
            X