【问题标题】:PHP recursion - display child arrays on one levelPHP递归 - 在一级显示子数组
【发布时间】:2016-05-02 15:30:19
【问题描述】:

我有以下数组:

$example = array(
array(
    'id' => 63,
    'parentid' => 0,
    'char_value' => 'End poverty in all its forms everywhere',
    'param_value' => 1,
    'children' => array(
        array(
            'id' => 84,
            'parentid' => 63,
            'char_value' => 'test 1',
            'param_value' => 1
        ),
        array(
            'id' => 85,
            'parentid' => 63,
            'char_value' => 'test 2',
            'param_value' => 1
        )
    )
));

还有以下递归函数:

function drawPropertyTree($array, $parent){
$result = array();
foreach ($array as $k => $v) {

    $pieces = explode(" ", $v['char_value'], 6);
    $name   = implode(" ", array_splice($pieces, 0, 3));

    $result[] = array(
        'id' => $v['id'],
        'parent' => $parent,
        'text' => $v['param_value'] . " " . $name
    );

    if (isset($v['children'])) {
        $result[] = drawPropertyTree($v['children'], $v['id']);
    }
}
return $result;}

我想列出同一级别的所有子数组,以及父节点。这是working sample,这是当前输出:

Array
(
[0] => Array
    (
        [id] => 63
        [parent] => 0
        [text] => 1 End poverty in
    )

[1] => Array
    (
        [0] => Array
            (
                [id] => 84
                [parent] => 63
                [text] => 1 test 1
            )

        [1] => Array
            (
                [id] => 85
                [parent] => 63
                [text] => 1 test 2
            )

    )
)

这是期望的结果:

Array (
[0] => Array
    (
        [id] => 63
        [parent] => 0
        [text] => 1 End poverty in
    )
[1] => Array
        (
            [id] => 84
            [parent] => 63
            [text] => 1 test 1
        )

[2] => Array
        (
            [id] => 85
            [parent] => 63
            [text] => 1 test 2
        )

【问题讨论】:

    标签: php arrays recursion


    【解决方案1】:

    只需对您的功能稍作改动 - 鉴于您需要支持任意深度:

    function drawPropertyTree($array, $parent)
    {
        $result = array();
        foreach ($array as $k => $v) {
    
            $pieces = explode(" ", $v['char_value'], 6);
            $name   = implode(" ", array_splice($pieces, 0, 3));
    
            $result[] = array(
                'id'     => $v['id'],
                'parent' => $parent,
                'text'   => $v['param_value'] . " " . $name
            );
    
            if (isset($v['children'])) {
                // drawPropertyTree returns an array
                // which must be merged into the existing array
                $result = array_merge($result, drawPropertyTree($v['children'], $v['id']));
            }
        }
        return $result;
    }
    

    【讨论】:

    • Doh...花了一个小时在这...谢谢!
    【解决方案2】:

    创建新的空数组并将所有元素推入 for 循环,并检查子项以将它们也推入新数组。没有任何递归

    【讨论】:

    • 你能提供任何sn-p吗?
    • 哦,我现在在火车上。现在试试看,我可能会在一个小时后做点什么
    猜你喜欢
    • 1970-01-01
    • 2019-02-20
    • 2011-05-18
    • 2020-08-03
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多