看了版主的無限分類,分成樹形結構後,如何還原

來源:互聯網
上載者:User
父子無限分類原始數組  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',  ),)?>開始形成樹,並且增加路徑,樹形數組為$treesArray(    [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        ))但是我有個問題,如何還原樹呢就是還原成原始數組那種二維形式呢,然後多個path值,因為剛才最主要的目的是加個path值$a=array (  0 =>  array (    'id' => '134',    'fid' => '0',    'name' => 't',    'path'=>'134'  ),  1 =>  array (    'id' => '133',    'fid' => '0',    'name' => 'k',    'path'=>' 133,137'  ),.........................我只想用遞迴可惜才學疏淺,一直不會遞迴,只能取道一層。。。是在寫不出來function test($array) {foreach ($array as $k=>$v) {if (array_key_exists('_sub', $v)) {$temp[]=array_slice($v, 0,4); //$temp[]=test($v[''_sub'']);} else {$temp[]=$v;}}return $temp;}$x=test($trees);print_r($x);列印出來的數組只有3個Array(    [0] => Array        (            [id] => 134            [fid] => 0            [name] => t            [path] => 134        )    [1] => Array        (            [id] => 133            [fid] => 0            [name] => k            [path] => 133        )    [2] => Array        (            [id] => 132            [fid] => 0            [name] => j            [path] => 132        ))。。。。真心求代碼


回複討論(解決方案)

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

你把函數修改為

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

代碼我先收下了,剛才看了一遍沒有看懂。。。。。。



謝謝兩位,再次謝過了,分有點少請不要介意


哎 什麼時候我能像2位那麼強啊

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.