最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP無限極分類函數(shù)的實現(xiàn)方法詳解

 更新時間:2017年04月15日 15:58:04   作者:我愛默小兜  
這篇文章主要介紹了PHP無限極分類函數(shù)的實現(xiàn)方法,結(jié)合實例形式詳細分析了php實現(xiàn)無限極分類的具體思路、實現(xiàn)代碼與相關(guān)注意事項,需要的朋友可以參考下

本文實例講述了PHP無限極分類函數(shù)的實現(xiàn)方法。分享給大家供大家參考,具體如下:

在開發(fā)程序的時候,有時候,我們需要獲取所有欄目(包括一級欄目、二級欄目、三級欄目等等),并按照父子關(guān)系形成樹型結(jié)構(gòu)??梢圆扇∈褂眠f歸或者通過引用方式(php中引用類似C或者C++中的指針,只不過換一種說法而已)。

通過引用方式實現(xiàn)無限極分類

思路:

1.即所有待處理的數(shù)據(jù)進行包裝成下標(biāo)為主鍵id(pk)的數(shù)組,便于有pid獲取對應(yīng)的父欄目。

2.對包裝的數(shù)據(jù)進行循環(huán),如果為根節(jié)點,則將其引用添加到tree中,否則,將其引用添加到其父類的子元素中。這樣雖然tree中,只是添加了根節(jié)點,但是每個根節(jié)點如果有子元素,其中包含了子元素的引用。故能形成樹型。

代碼如下

/**
 * 把返回的數(shù)據(jù)集轉(zhuǎn)換成Tree
 * @param array $list 要轉(zhuǎn)換的數(shù)據(jù)集
 * @param string $pk 自增字段(欄目id)
 * @param string $pid parent標(biāo)記字段
 * @return array
 * @author dqs <1696232133@qq.com>
 */
function make_tree($list,$pk='id',$pid='pid',$child='_child',$root=0){
  $tree=array();
  $packData=array();
  foreach ($list as $data) {
    $packData[$data[$pk]] = $data;
  }
  foreach ($packData as $key =>$val){
    if($val[$pid]==$root){//代表跟節(jié)點
      $tree[]=& $packData[$key];
    }else{
      //找到其父類
      $packData[$val[$pid]][$child][]=& $packData[$key];
    }
  }
  return $tree;
}

數(shù)據(jù)結(jié)構(gòu)如下:

執(zhí)行結(jié)果如下

Array
(
  [0] => Array
    (
      [id] => 6
      [pid] => 0
      [title] => 測試1
      [url] => test1
      [sort] => 0
      [create_time] => 1464076199
      [update_time] => 1464076199
      [status] => 1
      [target] => 0
    )
  [1] => Array
    (
      [id] => 7
      [pid] => 0
      [title] => 測試2
      [url] => test2
      [sort] => 0
      [create_time] => 1464076218
      [update_time] => 1464076218
      [status] => 1
      [target] => 0
    )
  [2] => Array
    (
      [id] => 1
      [pid] => 0
      [title] => 首頁
      [url] => Index/index
      [sort] => 1
      [create_time] => 1379475111
      [update_time] => 1379923177
      [status] => 1
      [target] => 0
    )
  [3] => Array
    (
      [id] => 2
      [pid] => 0
      [title] => 博客
      [url] => Article/index?category=blog
      [sort] => 2
      [create_time] => 1379475131
      [update_time] => 1379483713
      [status] => 1
      [target] => 0
      [_child] => Array
        (
          [0] => Array
            (
              [id] => 4
              [pid] => 2
              [title] => 個人博客
              [url] => ownblog
              [sort] => 0
              [create_time] => 1464075558
              [update_time] => 1464075558
              [status] => 1
              [target] => 0
              [_child] => Array
                (
                  [0] => Array
                    (
                      [id] => 8
                      [pid] => 4
                      [title] => 新浪博客
                      [url] => sinaBlog
                      [sort] => 0
                      [create_time] => 1464077276
                      [update_time] => 1464077276
                      [status] => 1
                      [target] => 0
                    )
                )
            )
          [1] => Array
            (
              [id] => 5
              [pid] => 2
              [title] => 他人博客
              [url] => otherBlog
              [sort] => 0
              [create_time] => 1464075582
              [update_time] => 1464075582
              [status] => 1
              [target] => 0
            )
        )
    )
  [4] => Array
    (
      [id] => 3
      [pid] => 0
      [title] => 官網(wǎng)
      [url] => http://www.onethink.cn
      [sort] => 3
      [create_time] => 1379475154
      [update_time] => 1387163458
      [status] => 1
      [target] => 0
    )
)

附加OneThink中無限極分類函數(shù)

/**
 * 把返回的數(shù)據(jù)集轉(zhuǎn)換成Tree
 * @param array $list 要轉(zhuǎn)換的數(shù)據(jù)集
 * @param string $pid parent標(biāo)記字段
 * @param string $level level標(biāo)記字段
 * @return array
 * @author 麥當(dāng)苗兒 <zuojiazi@vip.qq.com>
 */
function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
  // 創(chuàng)建Tree
  $tree = array();
  if(is_array($list)) {
    // 創(chuàng)建基于主鍵的數(shù)組引用
    $refer = array();
    foreach ($list as $key => $data) {
      $refer[$data[$pk]] =& $list[$key];
    }
    foreach ($list as $key => $data) {
      // 判斷是否存在parent
      $parentId = $data[$pid];
      if ($root == $parentId) {
        $tree[] =& $list[$key];
      }else{
        if (isset($refer[$parentId])) {
          $parent =& $refer[$parentId];
          $parent[$child][] =& $list[$key];
        }
      }
    }
  }
  return $tree;
}

通過遞歸方式實現(xiàn)無限極分類

思路:

1.使用循環(huán),分別獲取所有的根節(jié)點。

2.在獲取每個節(jié)點的時候,將該節(jié)點從原數(shù)據(jù)中移除,并遞歸方式獲取其所有的子節(jié)點,一直原數(shù)據(jù)為空。

代碼實現(xiàn)如下:

function make_tree1($list,$pk='id',$pid='pid',$child='_child',$root=0){
  $tree=array();
  foreach($list as $key=> $val){
    if($val[$pid]==$root){
      //獲取當(dāng)前$pid所有子類
        unset($list[$key]);
        if(! empty($list)){
          $child=make_tree1($list,$pk,$pid,$child,$val[$pk]);
          if(!empty($child)){
            $val['_child']=$child;
          }
        }
        $tree[]=$val;
    }
  }
  return $tree;
}

效果截圖如下:

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計算法總結(jié)》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)學(xué)運算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家PHP程序設(shè)計有所幫助。

相關(guān)文章

最新評論

金湖县| 香格里拉县| 龙岩市| 习水县| 治多县| 礼泉县| 黄骅市| 镇康县| 梧州市| 吴川市| 时尚| 明光市| 淮南市| 青冈县| 霍邱县| 兴海县| 禄丰县| 项城市| 讷河市| 新晃| 岳阳市| 烟台市| 湟中县| 昆明市| 雷山县| 徐汇区| 通河县| 类乌齐县| 克拉玛依市| 扶绥县| 广宗县| 丹东市| 栖霞市| 天祝| 柏乡县| 汉阴县| 牙克石市| 吴桥县| 德格县| 凭祥市| 本溪市|