复制现有的树枝并将其存储到数据库中

duplicate an existing tree branch and store it into the database

大家好,

我有一个分层数组,当我复制+粘贴一个节点并且我想将新的树分支插入数据库时​​,它是从 jsTree 获取的。

我的 table 有一个包含三个字段的邻接表结构 'id'、'text'、'parent_id'。

结构可以像下面这样或嵌套更多。我没有弄清楚如何跟踪父级以便在我递归遍历数组时知道哪些子级属于哪个父级。

最干净的方法是什么?

Array(
  [id] => 1
  [text] => 'a'
  [children] 
    =>Array(
       [0] => Array
           (
             [id] => 2
             [text] => 'b'
             [children] => []
            )

       [1] => Array
            (
             [id] => 3
             [text] => 'c'
             [children] => Array(
                    [0] => Array(
                                 [id] => 4
                                 [text] =>''
                                 [children]=>[]
                                 )
                                 )
            )
     )
   )

所以对我有用的最终解决方案是这个

function insertRows($data, $parent_id)
{
    foreach ($data as $key => $value) {
        if(isset($value['text']))
            // here insert the the $value['text'] and get the generated $id

        if (isset($value['children'])) {
            insertRows($value['children'], $id);
        }
    }
}

您可以将第三个索引设置为 parent_id,对于根元素,将 parent_id 设为 0,并在它们各自的子元素中将 parent_id 作为父元素的 id。

for root element :

Array(
    [id] => 1,
    [text] => 'a',
    [parent_id] => 0
);

for 1st  child it would be like 

Array(
    [id] => 2,
    [text] => 'a',
    [parent_id] => 1
);

要复制数据集试试这个:

function insertRows($array, $parentId = null)
{
    /** @var PDO $pdo  */
    global $pdo;

    foreach ($array as $key => $value) {

        // Add text and parent id to table.
        $pdo->query('INSERT INTO table SET text = "' . $value['text'] . '", parent_id = ' . $parentId);

        if (is_array($value['children'])) {
            insertRows($value['children'], $pdo->lastInsertId());
        }
    }
}

它未经测试类似于伪代码。更多的是提示。