Home  >  Article  >  Backend Development  >  请教一个简单的递归

请教一个简单的递归

WBOY
WBOYOriginal
2016-06-23 14:10:38733browse

$arr = array(
    array(
        'id' => 1,
        'parentid' => 0,
        'title' => 'a'
    ),
    array(
        'id' => 2,
        'parentid' => 1,
        'title' => 'a-1'
    ),
    array(
        'id' => 3,
        'parentid' => 1,
        'title' => 'a-1'
    ),
    array(
        'id' => 4,
        'parentid' => 2,
        'title' => 'a-1-1'
    )  
);

递归转换为数组如下:
$arr = array(
    array(
        'id' => 1,
        'parentid' => 0,
        'title' => 'a',
        'child' => array(
                       array(
                         'id' => 2,
                         'parentid' => 1,
                         'title' => 'a-1',
                         'child' => array(
                                    ......
                                    ) 
                       array(
                         'id' => 3,
                         'parentid' => 2,
                         'title' => 'a-2'
                       )
    ), 
    ......
);
请问要如何写这个递归呢?


回复讨论(解决方案)

function findChildren($list, $p=0){  $r = array();  foreach($list as $id=>$item){    if($item['parentid'] == $p) {      $r[$id] = $item;      if($t = findChildren($list, $item['id']) )        $r[$id]['children'][] = $t;    }  }  return $r;}        $arr = array(    array(        'id' => 1,        'parentid' => 0,        'title' => 'a'    ),    array(        'id' => 2,        'parentid' => 1,        'title' => 'a-1'    ),    array(        'id' => 3,        'parentid' => 1,        'title' => 'a-1'    ),    array(        'id' => 4,        'parentid' => 2,        'title' => 'a-1-1'    )  );print_r(findChildren($arr));
Array
(
    [0] => Array
        (
            [id] => 1
            [parentid] => 0
            [title] => a
            [children] => Array
                (
                    [0] => Array
                        (
                            [1] => Array
                                (
                                    [id] => 2
                                    [parentid] => 1
                                    [title] => a-1
                                    [children] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [3] => Array
                                                        (
                                                            [id] => 4
                                                            [parentid] => 2
                                                            [title] => a-1-1
                                                        )

                                                )

                                        )

                                )

                            [2] => Array
                                (
                                    [id] => 3
                                    [parentid] => 1
                                    [title] => a-1
                                )

                        )

                )

        )

)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:又是正则谢谢啊。Next article:页面返回问题