PHP递归,返回的位置

时间:2014-01-14 20:42:35

标签: php arrays sorting recursion

我有一个小片段来从多维数组中获取ID。

<?php

$array = array(
    array(
        'id' => 1,
        'children' => array(
            array(
                'id' => 12,
                'children' => array()
            ),
            array(
                'id' => 13,
                'children' => array(
                    array(
                        'id' => 112,
                        'children' => array()
                    )
                )
            )
        )
    ),
    array(
        'id' => 140,
        'children' => array(
            array(
                'id' => 144,
                'children' => array(
                    array(
                        'id' => 101,
                        'children' => array()
                    )
                )
            )
        )
    ),
    array(
        'id' => 32,
        'children' => array(
            array(
                'id' => 223,
                'children' => array()
            )
        )
    ),
    array(
        'id' => 40,
        'children' => array()
    )
);



function get_ids( $array, $result )
{
    foreach( $array as $a )
    {
        $result[] = $a['id'] . "\n";

        if ( count( $a['children'] ) )
        {           
            return get_ids( $a['children'], $result );
        }
    }   

    return $result;


}

print_r( get_ids( $array, array() ) );

此代码输出第一个数组ID,如下所示:

Array
(
    [0] => 1

    [1] => 12

    [2] => 13

    [3] => 112

)

如果我而不是$ result []放回echo并删除返回get_ids行的返回,它会按预期回显每个id,问题是我想将它们放在带有id的漂亮外观数组中。

我想我已经弄乱了回复陈述,但我不知道。

1 个答案:

答案 0 :(得分:3)

第一次返回只返回孩子的id;你失去了父母的身份。你需要两者。

所以,替换这个:

return get_ids( $a['children'], $result );

有了这个:

$result = array_merge( $result, get_ids( $a['children'] ));