$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'
                       )
    ), 
    ......
);
请问要如何写这个递归呢?

解决方案 »

  1.   

    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
                                    )                        )                )        ))