0

jsonformattet文字列を返すネストされたドラッグアンドドロップリストがあります。この文字列でphpserialize、json_decodeなどを実行できます。しかし、私は階層をDBに保存することに固執しました。

返される出力の例:

[{"id":1、 "children":[{"id":2、 "children":[{"id":4}、{"id":7}、{"id":8}]} 、{"id":3}]}、{"id":5}、{"id":6}]

...また...

配列
((
    [0]=>配列
        ((
            [id] => 1
            [子供]=>配列
                ((
                    [0]=>配列
                        ((
                            [id] => 2
                            [子供]=>配列
                                ((
                                    [0]=>配列
                                        ((
                                            [id] => 4
                                        )。

                                    [1]=>配列
                                        ((
                                            [id] => 7
                                        )。

                                    [2]=>配列
                                        ((
                                            [id] => 8
                                        )。

                                )。

                        )。

                    [1]=>配列
                        ((
                            [id] => 3
                        )。

                )。

        )。

    [1]=>配列
        ((
            [id] => 5
        )。

    [2]=>配列
        ((
            [id] => 6
        )。

)。

この出力を次のようなDB構造に保存したいと思います。

存在しない場合はテーブルを作成する`menu`(
  `id` int(11)NOT NULL AUTO_INCREMENT、
  `rang` int(11)NOT NULL、
  `parent_id` int(11)NOT NULL、
  `name` varchar(256)NOT NULL、
  `description` varchar(256)NOT NULL、
  主キー( `id`)
)ENGINE = InnoDB DEFAULT CHARSET = latin1 AUTO_INCREMENT = 9;

何か案は?

4

3 に答える 3

1

私はそれをこのようにします:

<?php
$jsonString = '[{"id":1,"children":[{"id":2,"children":[{"id":4},{"id":7},{"id":8}]},{"id":3}]},{"id":5},{"id":6}]';
$jsonArray = json_decode($jsonString, true);

function parseJsonArray($jsonArray, $parentID = 0)
{
  $return = array();
  foreach ($jsonArray as $subArray) {
     $returnSubSubArray = array();
     if (isset($subArray['children'])) {
       $returnSubSubArray = parseJsonArray($subArray['children'], $subArray['id']);
     }
     $return[] = array('id' => $subArray['id'], 'parentID' => $parentID);
     $return = array_merge($return, $returnSubSubArray);
  }

  return $return;
}

var_dump(parseJsonArray($jsonArray));

次のような配列を取得する必要があります。

Array ( 
  [0] => Array (
    [id] => 1 
    [parentID] => 0 
  ) 
  [1] => Array (
    [id] => 2
    [parentID] => 1 
  ) 
  // ETC.
) 
于 2012-07-06T08:04:47.767 に答える
0

mysqlでネストされたセットモデルを設定した場合、ネストされたセットのドイツ語チュートリアル、最善の方法、またはリクエスト文字列をDBに保存できます(ただし、mysql側ではアクションを実行できないことに注意してください...)

于 2012-07-06T07:53:08.803 に答える
0

私はあなたがあなたのDBの主キーとしてあなたのJSON-DataのIDを使用すると仮定します。したがって、LAST_INSERT_IDを処理する必要はありません。

function storeTree(array $treeList) {
    // Optional: Start DB-Transaction
    try {
        storeList($treeList);
        // Optional: Commit DB-Transaction
    } catch(Exception $e) {
        // Optional: Rollback DB-Transaction
    }

}

function storeList(array $list, $parentId=null) {
    foreach($list as $child) {
        storeChild($child, $parentId);
    }
}

function storeChild(array $childData, $parentId=null) {
    $childId = $childData['id'];
    $children = isset($childData['children']) ? (array) $childData['children'] : array();

    // Add a new dataset: `id` = $childId, `parent_id` = $parentId

    storeList($children, $childId);
}

storeTree($youJsonData);

このコードはテストされておらず、エラーが含まれている可能性があります...

于 2012-07-06T08:01:26.197 に答える