亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

思路:

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

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標記字段
 * @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標記字段
 * @param string $level level標記字段
 * @return array
 * @author 麥當苗兒 <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){
      //獲取當前$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;
}

效果截圖如下:

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

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

相關文章

  • PHP獲取指定時間段之間的 年,月,天,時,分,秒

    PHP獲取指定時間段之間的 年,月,天,時,分,秒

    前端傳倆個標準的 時間格式過來,格式像2009-05-12 12:12:30,然后根據(jù)需要返回這個時間段的不同單位的表示,對于時間格式的校驗我這里代碼沒貼出來,所以用的時候自己考慮加上
    2016-06-06
  • php獲取文件名后綴常用方法小結(jié)

    php獲取文件名后綴常用方法小結(jié)

    這篇文章主要介紹了php獲取文件名后綴常用方法,實例分析了五種常用的php獲取文件名后綴的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • PHP正則表達式匹配替換與分割功能實例淺析

    PHP正則表達式匹配替換與分割功能實例淺析

    這篇文章主要介紹了PHP正則表達式匹配替換與分割功能,簡單分析了php正則匹配、替換與分割相關函數(shù),并結(jié)合實例形式演示了php正則匹配的相關操作技巧,需要的朋友可以參考下
    2017-02-02
  • php判斷訪問IP的方法

    php判斷訪問IP的方法

    這篇文章主要介紹了php判斷訪問IP的方法,涉及php針對服務器端預定義變量$_SERVER的相關判斷與使用技巧,需要的朋友可以參考下
    2015-06-06
  • PHP實現(xiàn)Redis分布式鎖的示例代碼

    PHP實現(xiàn)Redis分布式鎖的示例代碼

    并發(fā)寫入問題可能導致數(shù)據(jù)不一致或重復寫入,為了解決這個問題,我們可以使用Redis實現(xiàn)分布式鎖,本文主要為大家介紹了PHP實現(xiàn)Redis分布式鎖的相關知識,希望對大家有所幫助
    2023-12-12
  • php解析xml方法實例詳解

    php解析xml方法實例詳解

    這篇文章主要介紹了php解析xml方法,以實例形式詳細分析了php解析XML的相關技巧,需要的朋友可以參考下
    2015-05-05
  • PHP實現(xiàn)通過CURL上傳文件功能示例

    PHP實現(xiàn)通過CURL上傳文件功能示例

    這篇文章主要介紹了PHP實現(xiàn)通過CURL上傳文件功能,結(jié)合實例形式分析了php使用curl文件上傳操作相關屬性設置與使用技巧,需要的朋友可以參考下
    2018-05-05
  • PHP7內(nèi)核CGI與FastCGI詳解

    PHP7內(nèi)核CGI與FastCGI詳解

    在本篇文章里小編給大家整理了關于PHP7內(nèi)核CGI與FastCGI的相關知識點內(nèi)容,需要的朋友們學習下。
    2019-04-04
  • ThinkPHP中處理表單中的注意事項

    ThinkPHP中處理表單中的注意事項

    這篇文章主要介紹了ThinkPHP中處理表單中的注意事項,分析并總結(jié)了ThinkPHP表單處理中需要注意的問題,包括URL訪問、錯誤處理、查詢、添加、刪除的技巧等問題,需要的朋友可以參考下
    2014-11-11
  • PHP排序算法之希爾排序(Shell Sort)實例分析

    PHP排序算法之希爾排序(Shell Sort)實例分析

    這篇文章主要介紹了PHP排序算法之希爾排序(Shell Sort),結(jié)合實例形式較為詳細的分析了希爾排序的原理、實現(xiàn)方法及相關注意事項,需要的朋友可以參考下
    2018-04-04

最新評論