欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP無(wú)限極分類(lèi)函數(shù)的實(shí)現(xiàn)方法詳解

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

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

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

通過(guò)引用方式實(shí)現(xiàn)無(wú)限極分類(lèi)

思路:

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

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

代碼如下

/**
 * 把返回的數(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é)點(diǎn)
      $tree[]=& $packData[$key];
    }else{
      //找到其父類(lèi)
      $packData[$val[$pid]][$child][]=& $packData[$key];
    }
  }
  return $tree;
}

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

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

Array
(
  [0] => Array
    (
      [id] => 6
      [pid] => 0
      [title] => 測(cè)試1
      [url] => test1
      [sort] => 0
      [create_time] => 1464076199
      [update_time] => 1464076199
      [status] => 1
      [target] => 0
    )
  [1] => Array
    (
      [id] => 7
      [pid] => 0
      [title] => 測(cè)試2
      [url] => test2
      [sort] => 0
      [create_time] => 1464076218
      [update_time] => 1464076218
      [status] => 1
      [target] => 0
    )
  [2] => Array
    (
      [id] => 1
      [pid] => 0
      [title] => 首頁(yè)
      [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] => 個(gè)人博客
              [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中無(wú)限極分類(lèi)函數(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;
}

通過(guò)遞歸方式實(shí)現(xiàn)無(wú)限極分類(lèi)

思路:

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

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

代碼實(shí)現(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所有子類(lèi)
        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)容感興趣的讀者可查看本站專(zhuān)題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總

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

相關(guān)文章

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

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

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

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

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

    PHP正則表達(dá)式匹配替換與分割功能實(shí)例淺析

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

    php判斷訪問(wèn)IP的方法

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

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

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

    php解析xml方法實(shí)例詳解

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

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

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

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

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

    ThinkPHP中處理表單中的注意事項(xiàng)

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

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

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

最新評(píng)論