数组到数组作为树PHP

时间:2014-02-08 17:38:58

标签: php recursion tree

我在php中有一个数组:

Array
(
    [0] => Array
        (
            [ref] => a
            [ref_father] => 0
        )

    [1] => Array
        (
            [ref] => b
            [ref_father] => 0
        )
    [2] => Array
        (
            [ref] => c
            [ref_father] => a
        )

如何从这个数组中创建一个树:

Array
(
    [0] => Array
        (
            [ref] => a
            [ref_father] => 0
        )

    [1] => Array
        (
            [ref] => c
            [ref_father] => a
        )
    [2] => Array
        (
            [ref] => b
            [ref_father] => 0
        )

这意味着我想要显示父亲和他父亲的每个父亲。感谢

1 个答案:

答案 0 :(得分:0)

我将通过基础数组进行迭代,并创建一个新的数组,其中父亲作为索引,所有子项都在数组中。

新数组看起来像:

Array
(
    [0] => Array('a', 'b') // 0 Is the base root
    ['a'] => Array('c')

    ['b'] => Array ()
    ['c'] => Array()

然后,您可以使用如下函数:

$a = array(
    0 => array('a', 'b'),
    'a' => array('c'),
    'b' => array(),
    'c' => array()
);

$depth_array = array();

function build_depth($key, $mapped_array) {
    if (array_key_exists($key, $mapped_array)) {
        if ( count($mapped_array[$key]) == 0 ) return array();
        else {
            foreach( $mapped_array[$key] as $child ) {
                return array($child => build_depth($child, $mapped_array));
            }
        }
    }
}

foreach ( $a[0] as $root_child ) {
    $depth_array[$root_child] = build_depth($root_child, $a); 
}

无论深度如何,这都会递归地建立深度。 在这里测试: http://phptester.net/