从递归函数创建平面数组,而不是在之后展平

时间:2013-09-23 16:02:56

标签: php arrays recursion multidimensional-array flatten

我有一个递归函数,可以执行大量功能和一些数据库调用,以及什么不能创建一些很酷的东西。我想将每次调用函数的结果保存到数组中。

所以我这样做了,我得到了一个多维数组,其结构类似于函数的结果。它看起来像这样:

Array
(
    [0] => 2507
    [1] => Array
        (
            [0] => 2508
        )

    [2] => 2073
    [3] => Array
        (
            [0] => 2397
        )
)

我可以使用PHP 5.3的array_walk_recursive轻松压扁它。

但是,我希望我不需要在原始函数之后调用另一个函数,因为这似乎是多余的。

如何通过每次调用“创建”数据的递归函数创建平面数组?

我试图稍微截断我的递归函数...

function get_children() {
    $leaf = new array();

    $results = database_call();
    foreach($results as $res) {
        $leaf[] = $res;

        // do tons of stuff not included
        if($res->children == 1) {   
           $leaf[] = get_children();
        }
    }
return $leaf;
}

$i_wish_this_was_flat = get_children();

1 个答案:

答案 0 :(得分:2)

也许你可以使用

$leaf = array_merge($leaf, get_children());

而不是

$leaf[] = get_children();