Php 将json或多维数组保存到DB(平面)
我有一个嵌套的拖放列表,它返回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 ;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
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数据匹配吗?