0

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

演示 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
        )

)
4

2 回答 2

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>

于 2017-09-19T16:11:39.333 回答
1

好吧,这是我的解决方案,不是最好的,但很有效..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']);
        }
于 2017-09-19T17:34:26.520 回答