Php 将json或多维数组保存到DB(平面)

Php 将json或多维数组保存到DB(平面),php,json,multidimensional-array,drag-and-drop,nested-lists,Php,Json,Multidimensional Array,Drag And Drop,Nested Lists,我有一个嵌套的拖放列表,它返回json formattet字符串。我可以在这个字符串上运行php序列化、json_解码等。但我坚持在DB中保存层次结构 返回的输出示例: [{“id”:1,“children”:[{“id”:2,“children”:[{“id”:4},{“id”:7},{“id”:8}},{“id”:3}},{“id”:5},{“id”:6}] ……或者 Array ( [0] => Array ( [id] => 1

我有一个嵌套的拖放列表,它返回json formattet字符串。我可以在这个字符串上运行php序列化、json_解码等。但我坚持在DB中保存层次结构

返回的输出示例:

[{“id”:1,“children”:[{“id”:2,“children”:[{“id”:4},{“id”:7},{“id”:8}},{“id”:3}},{“id”:5},{“id”:6}]

……或者

Array ( [0] => Array ( [id] => 1 [children] => Array ( [0] => Array ( [id] => 2 [children] => Array ( [0] => Array ( [id] => 4 ) [1] => Array ( [id] => 7 ) [2] => Array ( [id] => 8 ) ) ) [1] => Array ( [id] => 3 ) ) ) [1] => Array ( [id] => 5 ) [2] => Array ( [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结构:

CREATE TABLE IF NOT EXISTS `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, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
Array ( 
  [0] => Array (
    [id] => 1 
    [parentID] => 0 
  ) 
  [1] => Array (
    [id] => 2
    [parentID] => 1 
  ) 
  // ETC.
) 
如果不存在“菜单”,则创建表( `id`int(11)非空自动增量, `rang`int(11)不为空, `父_id`int(11)不为空, `name`varchar(256)不为空, `description`varchar(256)不为空, 主键(`id`) )ENGINE=InnoDB默认字符集=latin1自动增量=9;
有什么想法吗?

在mysql上设置嵌套集模型后,最好的方法是什么,或者可以将请求字符串存储在数据库中(但要注意,在mysql端不能执行任何操作…

我假设,您使用JSON数据中的ID作为数据库中的主键。因此,您不必处理最后的插入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);

此代码未经测试,可能包含错误…

我会这样做:

<?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));

您能解释一下DB字段名如何与JSON数据匹配吗?