如何从数组中创建二叉树数组?

时间:2016-05-13 15:02:37

标签: php arrays graph neo4j binary-tree

我有一群人:

reduce

我希望得到这个:

array(
    array(
       'name' => 'John',
       'id' => 1,
       'mother_id' => 2,
       'father_id' => 3
    ),
    array(
       'name' => 'Lucy',
       'id' => 2,
       'mother_id' => 5,
       'father_id' => 4
    ),
    array(
       'name' => 'Jim',
       'id' => 3,
       'mother_id' => 7,
       'father_id' => 9
    ),
    array(
       'name' => 'Paul',
       'id' => 4,
       'mother_id' => 534,
       'father_id' => 54
    ),
    array(
       'name' => 'Laura',
       'id' => 5,
       'mother_id' => 554,
       'father_id' => 51
    ),
    array(
       'name' => 'Vanessa',
       'id' => 7,
       'mother_id' => 5354,
       'father_id' => 514
    ),
    array(
       'name' => 'Adam',
       'id' => 9,
       'mother_id' => 245354,
       'father_id' => 514234
    ),
);

所以约翰是一个有母亲和父亲的孩子,父亲有母亲和父亲,母亲有母亲和父亲等,并写了一个脚本,做了一些但不是我想要的东西

array(
array(
    'person' => array(
        'name' => 'John',
        'id' => 1,
        'mother_id' => 2,
        'father_id' => 3
    ),
    'parents' => array(
        'mother' => array(
              'person' => array(
                  'name' => 'Lucy',
                  'id' => 2,
                  'mother_id' => 5,
                  'father_id' => 4
              ),
              'parents' => array(
                  'mother' => array(
                      'person' => array(
                          'name' => 'Laura',
                          'id' => 5,
                          'mother_id' => 554,
                          'father_id' => 51
                      ),
                      'parents' => array(...)
                  ),
                  'father' => array(
                        'person' => array(
                            'name' => 'Paul',
                            'id' => 4,
                            'mother_id' => 534,
                            'father_id' => 54
                        ),
                        'parents' => array(...)
                   ), 
              )
        ),
        'father' => ...
)

我怎样才能让它发挥作用?或者也许有一些适当的库?

1 个答案:

答案 0 :(得分:0)

你几乎拥有它。我会这样做:

function parseTree(&$tree, $root = null)
{
    $return = null;
    foreach ($tree as $key => $item) {
        if ($root == null || $item['id'] == $root) {
            $return = [
                'person' => $item,
                'parents' => [
                    'father' => parseTree($tree, $item['father_id']),
                    'mother' => parseTree($tree, $item['mother_id'])
                ]
            ];
            unset ($tree[$key]);
        }
    }
    return $return;
}