国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php 無限分類 樹形數據格式化代碼

2024-05-04 23:50:53
字體:
來源:轉載
供稿:網友

我們知道很多開源軟件的無限分類都是采用遞歸的算法,但是我們知道遞歸即浪費時間,又浪費空間(內存),
上次我也分享了個我自己原創的無限分類生成樹的方法,一熱心php高手網友給我提出了寶貴的建議,我測試了一下,這段代碼的時間非常之短參考: http://www.oschina.net/code/snippet_98719_11296,我再次整理了一下,發現數據庫查詢出數據之后,我們就已經定好了鍵值,因而實踐中,我們一般會在model中查詢出格式化成主鍵值對應數據的形式,因而我們可以直接用這樣的數據,就少了一層循環。代碼也非常簡潔。

原來的代碼:

function genTree($items,$id='id',$pid='pid',$son = 'children'){  $tree = array(); //格式化的樹  $tmpMap = array(); //臨時扁平數據     foreach ($items as $item) {    $tmpMap[$item[$id]] = $item;  }     foreach ($items as $item) {    if (isset($tmpMap[$item[$pid]])) {      $tmpMap[$item[$pid]][$son][] = &$tmpMap[$item[$id]];    } else {      $tree[] = &$tmpMap[$item[$id]];    }  }  unset($tmpMap);  return $tree;} $items1 = array(    array('id' => 1, 'pid' => 0, 'name' => '一級11' ),    array('id' => 11, 'pid' => 0, 'name' => '一級12' ),    array('id' => 2, 'pid' => 1, 'name' => '二級21' ),    array('id' => 10, 'pid' => 11, 'name' => '二級22' ),    array('id' => 3, 'pid' => 1, 'name' => '二級23' ),    array('id' => 12, 'pid' => 11, 'name' => '二級24' ),    array('id' => 9, 'pid' => 1, 'name' => '二級25' ),    array('id' => 14, 'pid' => 1, 'name' => '二級26' ),    array('id' => 4, 'pid' => 9, 'name' => '三級31' ),    array('id' => 6, 'pid' => 9, 'name' => '三級32' ),    array('id' => 7, 'pid' => 4, 'name' => '四級41' ),    array('id' => 8, 'pid' => 4, 'name' => '四級42' ),    array('id' => 5, 'pid' => 4, 'name' => '四級43' ),    array('id' => 13, 'pid' => 4, 'name' => '四級44' ),    array('id' => 15, 'pid' => 8, 'name' => '五級51' ),    array('id' => 16, 'pid' => 8, 'name' => '五級52' ),    array('id' => 17, 'pid' => 8, 'name' => '五級53' ),    array('id' => 18, 'pid' => 16, 'name' => '六級64' ),); var_dump(genTree($items1));

以下是補充:

/** * 此方法由@Tonton 提供 * http://my.oschina.net/u/918697 * @date 2012-12-12 */function genTree5($items) {  foreach ($items as $item)    $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];  return isset($items[0]['son']) ? $items[0]['son'] : array();}
/** * 將數據格式化成樹形結構 * @author Xuefen.Tong * @param array $items * @return array */function genTree9($items) {  $tree = array(); //格式化好的樹  foreach ($items as $item)    if (isset($items[$item['pid']]))      $items[$item['pid']]['son'][] = &$items[$item['id']];    else      $tree[] = &$items[$item['id']];  return $tree;} $items = array(  1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'),  2 => array('id' => 2, 'pid' => 0, 'name' => '黑龍江省'),  3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'),  4 => array('id' => 4, 'pid' => 2, 'name' => '哈爾濱市'),  5 => array('id' => 5, 'pid' => 2, 'name' => '雞西市'),  6 => array('id' => 6, 'pid' => 4, 'name' => '香坊區'),  7 => array('id' => 7, 'pid' => 4, 'name' => '南崗區'),  8 => array('id' => 8, 'pid' => 6, 'name' => '和興路'),  9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),  10 => array('id' => 10, 'pid' => 8, 'name' => '東北林業大學'),  11 => array('id' => 11, 'pid' => 9, 'name' => '哈爾濱工業大學'),  12 => array('id' => 12, 'pid' => 8, 'name' => '哈爾濱師范大學'),  13 => array('id' => 13, 'pid' => 1, 'name' => '贛州市'),  14 => array('id' => 14, 'pid' => 13, 'name' => '贛縣'),  15 => array('id' => 15, 'pid' => 13, 'name' => '于都縣'),  16 => array('id' => 16, 'pid' => 14, 'name' => '茅店鎮'),  17 => array('id' => 17, 'pid' => 14, 'name' => '大田鄉'),  18 => array('id' => 18, 'pid' => 16, 'name' => '義源村'),  19 => array('id' => 19, 'pid' => 16, 'name' => '上壩村'),);print_r(genTree5($items));print_r(genTree9($items));//后者輸出格式,前者類似,只是數組鍵值不一樣,不過不影響數據結構/*Array([0] => Array  (    [id] => 1    [pid] => 0    [name] => 江西省    [son] => Array      (        [0] => Array          (            [id] => 3            [pid] => 1            [name] => 南昌市          )         [1] => Array          (            [id] => 13            [pid] => 1            [name] => 贛州市            [son] => Array              (                [0] => Array                  (                    [id] => 14                    [pid] => 13                    [name] => 贛縣                    [son] => Array                      (                      [0] => Array                        (                          [id] => 16                          [pid] => 14                          [name] => 茅店鎮                          [son] => Array                            (                            [0] => Array                              (                              [id] => 18                              [pid] => 16                              [name] => 義源村                              )                             [1] => Array                              (                              [id] => 19                              [pid] => 16                              [name] => 上壩村                              )                             )                         )                       [1] => Array                        (                          [id] => 17                          [pid] => 14                          [name] => 大田鄉                        )                       )                   )                 [1] => Array                  (                    [id] => 15                    [pid] => 13                    [name] => 于都縣                  )               )           )       )   ) [1] => Array  (    [id] => 2    [pid] => 0    [name] => 黑龍江省    [son] => Array      (        [0] => Array          (            [id] => 4            [pid] => 2            [name] => 哈爾濱市            [son] => Array              (              [0] => Array                (                  [id] => 6                  [pid] => 4                  [name] => 香坊區                  [son] => Array                    (                    [0] => Array                      (                        [id] => 8                        [pid] => 6                        [name] => 和興路                        [son] => Array                          (                            [0] => Array                              (                              [id] => 10                              [pid] => 8                              [name] =>                               東北林業大學                              )                             [1] => Array                              (                              [id] => 12                              [pid] => 8                              [name] =>                              哈爾濱師范大學                              )                           )                       )                     )                 )               [1] => Array                (                  [id] => 7                  [pid] => 4                  [name] => 南崗區                  [son] => Array                    (                    [0] => Array                      (                      [id] => 9                      [pid] => 7                      [name] => 西大直街                      [son] => Array                        (                        [0] => Array                          (                          [id] => 11                          [pid] => 9                          [name] =>                           哈爾濱工業大學                          )                         )                       )                     )                 )               )           )         [1] => Array          (            [id] => 5            [pid] => 2            [name] => 雞西市          )       )   ))*/

極其簡單有效!??!非常受用!

 

注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 和静县| 阿图什市| 图们市| 民乐县| 陆川县| 萍乡市| 普兰县| 南安市| 盐池县| 安庆市| 天气| 文成县| 栾城县| 济阳县| 墨玉县| 曲阜市| 和平县| 乡宁县| 望都县| 沅陵县| 宜州市| SHOW| 大兴区| 长乐市| 长宁区| 昆明市| 昆明市| 珠海市| 上犹县| 镇安县| 孝义市| 娄烦县| 崇文区| 德清县| 宜宾市| 应用必备| 通州市| 和静县| 陇南市| 天津市| 突泉县|