溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用thinkphp5怎么實(shí)現(xiàn)一個無限級分類

發(fā)布時間:2021-04-20 17:18:02 來源:億速云 閱讀:126 作者:Leah 欄目:開發(fā)技術(shù)

使用thinkphp5怎么實(shí)現(xiàn)一個無限級分類?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

php有什么用

php是一個嵌套的縮寫名稱,是英文超級文本預(yù)處理語言,它的語法混合了C、Java、Perl以及php自創(chuàng)新的語法,主要用來做網(wǎng)站開發(fā),許多小型網(wǎng)站都用php開發(fā),因?yàn)閜hp是開源的,從而使得php經(jīng)久不衰。

當(dāng)前的getCate方法,有三個參數(shù):

第一個是$pid,是父類的id,默認(rèn)為0,表示從頂級開始查起。

第二個參數(shù)是返回的查詢結(jié)果,我們放在一個數(shù)組中返回,注意,這個變量是引入方式傳入的。

在遞歸函數(shù)中,返回結(jié)果有三種方式:

第一種就是大家比較熟悉的,使用全局變量$_GLOBALS[],這個方法有副作用,我們不用它;

第二種方式也不錯,是在函數(shù)中用static關(guān)鍵字,聲明一個靜態(tài)變量,它可以將每一次的遞歸執(zhí)行結(jié)果進(jìn)行累計(jì),最后再返回,非常好理解,但占用資源過多,執(zhí)行效率低;

第三種,就是采用引用參數(shù)的方式,來返回結(jié)果,這也是目前主流的技術(shù)。盡管理解起來有難度,但執(zhí)行效率是最高的,我們要玩,就玩大的,所以這里,我們就直接采用引用,來返回查詢結(jié)果。

第三個參數(shù),可以沒有,它是用來設(shè)置一下分類之間的層次顯示的,可以讓結(jié)果看上去更直觀清晰。

<?php
 
namespace app\admin\model;
 
use think\Collection;
use think\Model;
 
class Category extends Model
{
 //創(chuàng)建一個靜態(tài)方法getCate,來獲取分類信息
 
 /**
  * @param int $pid: 當(dāng)前分類的父id
  * @param array $result:引用返回值
  * @param int $blank:設(shè)置分類之間的顯示提示
  */
 public static function getCate($pid=0, &$result=[], $blank=0)
 {
  //1.分類表查詢:$pid
  $res = self::all(['pid'=>$pid]);
 
  //2.自定義分類名稱前面的提示信息
  $blank += 2;
 
  //3.遍歷分類表
  foreach ($res as $key => $value) {
 
   //3-1自定義分類名稱的顯示格式
   $cate_name = '|--'.$value->cate_name;
   $value->cate_name = str_repeat('&nbsp;',$blank).$cate_name;
 
   //3-2將查詢到的當(dāng)前記錄保存到結(jié)果$result中
   $result[] = $value;
 
   //3-3關(guān)鍵:將當(dāng)前記錄的id,做為下一級分類的父id,$pid,繼續(xù)遞歸調(diào)用本方法
   self::getCate($value->id, $result, $blank);
  }
 
  //4.返回查詢結(jié)果,調(diào)用結(jié)果集類make方法打包當(dāng)前結(jié)果,轉(zhuǎn)為二維數(shù)組返回
  return Collection::make($result)->toArray();
 }
}

控制器中調(diào)用代碼:

public function edit(Request $request)
{
 //1.獲取一下分類id
 $cate_id = $request -> param('id');
 
 //2.查詢要更新的數(shù)據(jù)
 $cate_now = CategoryModel::get($cate_id);
 
 //3.遞歸查詢所有的分類信息
 $cate_level = CategoryModel::getCate();
 
 //4.模板賦值
 $this -> view -> assign('cate_now', $cate_now);
 $this -> view -> assign('cate_level', $cate_level);
 
 
 //5.渲染模板
 return $this -> view -> fetch('category_edit');
}

看完上述內(nèi)容,你們掌握使用thinkphp5怎么實(shí)現(xiàn)一個無限級分類的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI