tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
448
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Sep 2001
    Ort
    Berlin
    Beiträge
    345
    Hallo zusammen,

    ich versuche seit Stunden meinen dynamisch erstellen Kategoriebaum in meine mySQL-DB zu speichern, jedoch habe ich irgendwo einen logischen denkfehler.

    jSON:
    PHP-Code:
    ["1""2""3""4", ["5", [["6", ["7"]]]], "8""9""10"
    diese jSON-Daten bekomme ich von meinem JavaScript per Ajax geschickt. Soweit so gut, nun sollen die Beziehungen der einzelnen Kategorien anhand dieser jSON-Daten gespeichert werden.

    Zum Verständnis:
    Kategorie(ID) "1" hat die ParentID: 0
    Kategorie(ID) "2" hat die ParentID: 0
    Kategorie(ID) "3" hat die ParentID: 0
    Kategorie(ID) "4" hat die ParentID: 0
    Kategorie(ID) "5" hat die ParentID: 0
    Kategorie(ID) "6" hat die ParentID: 5
    Kategorie(ID) "7" hat die ParentID: 6
    Kategorie(ID) "8" hat die ParentID: 0
    Kategorie(ID) "9" hat die ParentID: 0
    Kategorie(ID) "10" hat die ParentID: 0

    Die "Verschachtelung" der Beziehung (KategorieTiefe) soll bis in unendliche erweiterbar sein.

    Eigentlich sollte das kein Problem sein, jedoch hält mich dieses Problem seit Stunden auf und ich finde keine passable Lösung. Leider kann ich nicht mal einen Code-Ansatz liefern, da er nur verwirren würde (denke ich), da meine Ansätze immer nur in einer Ebene (Kategorietiefe) funktionieren.

    Vielen Dank schon mal im voraus!
     

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Hallo,

    was du suchst, ist eine rekursive Funktion, die ungefähr so aussieht:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    <?php
    $json = '["1", "2", "3", "4", ["5", [["6", ["7"]]]], "8", "9", "10"]';
     
     
    $o = json_decode($json);
     
    function rec_insert($array, $parent = 0)
    {
        $result = '';
        foreach($array as $key => $element)
        {
            if(is_array($element))
                $result .= rec_insert($element, $key);
            else
                $result .= sprintf("INSERT INTO tabelle (element,parent) VALUES (%d, %d);\n", $element, $parent);
        }
        return $result;
    }
     
    var_dump(rec_insert($o));

    Die Funktion liefert nicht genau das, was du brauchst, aber vielleicht ist es ein guter Anfang, an dem du rum experimentieren kannst.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    Registriert seit
    Sep 2001
    Ort
    Berlin
    Beiträge
    345
    Vielen Dank schonmal für die schnelle Antwort, saftmeister. Habe es bereits mit rekursiven Funktionen versucht, das Problem ist das ab Ebene 2 jedes Element ein Array ist. also auch wenn nur eine Zahl drin steht, welche im nachfolgenden Element(Array) ja dann als ParentID verwendet werden soll. Ich zweifel inzwischen ob dies überhaupt möglich ist. Ich versuche die Problematik mal etwas detalierter darzustellen.

    Die Problemematik stellt sich wie folgt da:

    PHP-Code:
    $json '["1", "2", "3", "4", ["5", [["6", ["7"]]]], "8", "9", "10"]'
    [0]-[3] (values: 1,2,3,4) Stellen kein Problem da (ParentID:0);
    [4] Ist ein Array;
    [4][0] hat den Wert 5 und bekommt die ParentID: 0;
    [4][1] ist ein wieder ein array;
    [4][1][0] Array;
    [4][1][0][0] hat den Wert 6 und bekommt die ParentID: 5;
    [4][1][0][1] Array;
    [4][1][0][1][0] Wert 7 ParentID: 6;
    [5]-[7] (values: 8,9,10) bekommen ParentID: 0;

    Alles hin und hergegrübel bringt nichts ich habe schon fast 30 test_x.php´s wenn ich bei der einen schaffe funktioniert eine andere Variante nicht mehr.
    Ich hänge mal noch drei Beispiele an, vielleicht bekommt das ja jemand von euch hin.
    ["1", "9", "8", "7", "6", ["10", ["2"]], "5", "4", "3"]
    ["1", "9", "8", "7", ["6", [["10", ["2"]]]], "5", "4", "3"]
    [["9", ["1"]], ["8", ["3", "2", ["4", [["6", ["7"]]]]]], ["5", ["10"]]]


    hier mal die Ausgabe des Array´s (von der Erleuterung oben)
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => Array
            (
                [0] => 5
                [1] => Array
                    (
                        [0] => Array
                            (
                                [0] => 6
                                [1] => Array
                                    (
                                        [0] => 7
                                    )
     
                            )
     
                    )
     
            )
     
        [5] => 8
        [6] => 9
        [7] => 10
    )
     

Ähnliche Themen

  1. JSON Daten in Text Datei speichern
    Von RageNo1 im Forum PHP
    Antworten: 4
    Letzter Beitrag: 16.04.11, 02:46
  2. Probleme beim Auslesen eines JSON-Objektes
    Von jhartlep im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 08.02.11, 10:10
  3. Value eines Dynamischen Droptdownfeldes
    Von Peace-Maker im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 07.11.08, 11:06
  4. Problem beim verwenden eines JSON
    Von Andre_d im Forum Javascript & Ajax
    Antworten: 10
    Letzter Beitrag: 12.09.08, 00:49
  5. Antworten: 4
    Letzter Beitrag: 13.03.07, 14:17

Stichworte