Я работаю с jquery orgchart и хочу сохранить изменения моей диаграммы в базе данных, в orgchart есть метод для получения модифицированной древовидной структуры getHierarchy (). Проблема в том, как разобрать JSON и сохранить в базе данных.
ДЕМО JSON:
{
"id": "1",
"children": [
{
"id": "40",
"children": [
{
"id": "53"}
]
},
{
"id": "57",
"children": [
{
"id": "72",
"children": [
{
"id": "73"}
]
}
]
}
]
}
Я хочу что-то вроде плоского массива для легкого обновления в БД
(
[0] => Array
(
[id] => 1
[parentid] => 0
)
[1] => Array
(
[id] => 40
[parentid] => 1
)
[2] => Array
(
[id] => 53
[parentid] => 40
)
[3] => Array
(
[id] => 57
[parentid] => 1
)
[4] => Array
(
[id] => 72
[parentid] => 57
)
[5] => Array
(
[id] => 73
[parentid] => 72
)
)
var jsonData = [JSON.parse('{"id":"1","children":[{"id":"40", "children":[{"id":"53"}]},{"id":"57","children":[{"id":"72","children":[{"id":"73"}]}]}]}')],
outputData = [],
parentId = 0;
function convert( data, parentId ){
$.each( data, function(index, item){
outputData.push({
id: item.id,
parent_id: parentId
});
if(item.hasOwnProperty('children')){
convert(item.children, item.id );
}
});
}
convert( jsonData, 0 );
console.log(outputData);
<body>
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>
</body>
Ну, это мое решение, не лучшее, но работает .. JSON отправляется на PHP, где я сделал обновления ..
$datax=json_decode($this->request->query['tree'],true);
function tree_to_array($datas, $father = 0)
{
$array = Array();
foreach ($datas as $val)
{
if(isset($val["id"]))
{
$toSaveDB = array("id" => $val["id"], "parent_id" => $father);
$array[] = $toSaveDB;
$parent_id=$val["id"];
if(isset($val["children"]))
{
//Root problem.. this is only for nodes that have children
if($parent_id!=1)
{
$children = tree_to_array($val["children"], $parent_id);
if (!empty($children))
{
$array = array_merge($array, $children);
}
}
}
}
else
{
if (is_array($val))
{
$children = tree_to_array($val, $parent_id);
if (!empty($children))
{
$array = array_merge($array, $children);
}
}
}
}
return $array;
}$new_array=tree_to_array($datax, $father = 0);
//Finally save to DB
foreach($new_array as $node)
{
$this->Area->id = $node['id'];
$this->Area->saveField('parent_orgchart', $node['parent_id']);
}