从orgchart json更新数据库

时间:2017-09-19 14:54:21

标签: php jquery json hierarchy orgchart

我正在使用jquery orgchart,我想将图表的更改保存到数据库,orgchart有一个方法来获取修改后的树结构getHierarchy()。问题是如何解析JSON并保存到数据库。

DEMO JSON:

{
  "id": "1",
  "children": [
    {
      "id": "40",
      "children": [
        {
          "id": "53"
        }
      ]
    },
    {
      "id": "57",
      "children": [
        {
          "id": "72",
          "children": [
            {
              "id": "73"
            }
          ]
        }
      ]
    }
  ]
}

我想要一个类似扁平数组的东西,以便在DB中轻松更新

(
    [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
        )

)

2 个答案:

答案 0 :(得分:2)



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>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这是我的解决方案,不是最好的但是有效.J ..发送到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']);
        }