<?php
$arr = Array
(
    0 => Array
        (
            'id' => 134,
            'fid' => 0,
            'name' => 't',
            'path' => 134,
            '_sub' => Array
                (
                    0 => Array
                        (
                            'id' => 136,
                            'fid' => 134,
                            'name' => '我是t的分类t2',
                            'path' => '134,136'
                        ),
 
                    1 => Array
                        (
                            'id' => 135,
                            'fid' => 134,
                            'name' => '我是t的分类t1',
                            'path' => '134,135'
                        )
 
                )
 
        ),
 
    1 => Array
        (
            'id' => 133,
            'fid' => 0,
            'name' => 'k',
            'path' => 133,
            '_sub' => Array
                (
                    0 => Array
                        (
                            'id' => 137,
                            'fid' => 133,
                            'name' => '我是k的分类1',
                            'path' => '133,137',
                            '_sub' => Array
                                (
                                    0 => Array
                                        (
                                            'id' => 138,
                                            'fid' => 137,
                                            'name' => '我是k的分类1-1',
                                            'path' => '133,137,138',
                                            '_sub' => Array
                                                (
                                                    0 => Array
                                                        (
                                                            'id' => 139,
                                                            'fid' => 138,
                                                            'name' => '我是k的分类1-1-1',
                                                            'path' => '133,137,138,139',
                                                            '_sub' => Array
                                                                (
                                                                    0 => Array
                                                                        (
                                                                            'id' => 140,
                                                                            'fid' => 139,
                                                                            'name' => '我是k的分类1-1-1-1',
                                                                            'path' => '133,137,138,139,140'
                                                                        )
 
                                                                )
 
                                                        )
 
                                                )
 
                                        )
 
                                )
 
                        )
 
                )
 
        ),
 
    2 => Array
        (
            'id' => 132,
            'fid' => 0,
            'name' => 'j',
            'path' => 132
        )
 
);
$temp = array();function test($array,&$temp) {
 
    foreach ($array as $k=>$v) {            if (array_key_exists('_sub', $v)) {
 
                $temp[]=array_slice($v, 0,4);
                test($v['_sub'],$temp);
 
            } else {
  array_push($temp, $v);
 
            }
    }
 
}
 
test($arr,$temp);
print_r($temp);?>

解决方案 »

  1.   

    你把函数修改为function find_child($ar) {
      foreach($ar as $v) $t[$v['id']] = $v;
      foreach ($t as $k => $item){
        $t[$k]['path'] = $item['id'];
        if( $item['fid'] ) {
          $t[$item['fid']]['_sub'][$item['id']] =& $t[$k];
          $t[$k]['path'] = $t[$item['fid']]['path'] . ',' . $t[$k]['id'];
        }
      }
      return $t;
    }
    $a=array (
      0 =>
      array (
        'id' => '134',
        'fid' => '0',
        'name' => 't',
      ),
      1 =>
      array (
        'id' => '133',
        'fid' => '0',
        'name' => 'k',
      ),
      2 =>
      array (
        'id' => '132',
        'fid' => '0',
        'name' => 'j',
      ),
      3 =>
      array (
        'id' => '137',
        'fid' => '133',
        'name' => '我是k的分类1',
      ),
      4 =>
      array (
        'id' => '136',
        'fid' => '134',
        'name' => '我是t的分类t2',
      ),
      5 =>
      array (
        'id' => '135',
        'fid' => '134',
        'name' => '我是t的分类t1',
      ),
      6 =>
      array (
        'id' => '138',
        'fid' => '137',
        'name' => '我是k的分类1-1',
      ),
      7 =>
      array (
        'id' => '139',
        'fid' => '138',
        'name' => '我是k的分类1-1-1',
      ),
      8 =>
      array (
        'id' => '140',
        'fid' => '139',
        'name' => '我是k的分类1-1-1-1',
      ),
    );$r = find_child($a);
    foreach($r as $k=>$v) if(isset($v['_sub'])) unset($r[$k]['_sub']);
    print_r($r);
    Array
    (
        [134] => Array
            (
                [id] => 134
                [fid] => 0
                [name] => t
                [path] => 134
            )    [133] => Array
            (
                [id] => 133
                [fid] => 0
                [name] => k
                [path] => 133
            )    [132] => Array
            (
                [id] => 132
                [fid] => 0
                [name] => j
                [path] => 132
            )    [137] => Array
            (
                [id] => 137
                [fid] => 133
                [name] => 我是k的分类1
                [path] => 133,137
            )    [136] => Array
            (
                [id] => 136
                [fid] => 134
                [name] => 我是t的分类t2
                [path] => 134,136
            )    [135] => Array
            (
                [id] => 135
                [fid] => 134
                [name] => 我是t的分类t1
                [path] => 134,135
            )    [138] => Array
            (
                [id] => 138
                [fid] => 137
                [name] => 我是k的分类1-1
                [path] => 133,137,138
            )    [139] => Array
            (
                [id] => 139
                [fid] => 138
                [name] => 我是k的分类1-1-1
                [path] => 133,137,138,139
            )    [140] => Array
            (
                [id] => 140
                [fid] => 139
                [name] => 我是k的分类1-1-1-1
                [path] => 133,137,138,139,140
            ))