php无限分类原理,php 递归无限级分类原理和实现代码
遞歸無限級分類的原理:
每一個分類都記錄它的父級id,當(dāng)為頂級分類時,父級id為0。這樣無論哪個分類,都可以通過父級id一層一層去查明它的所有父級,以便清楚知道它所屬何種分類,層級深度為幾。
對數(shù)據(jù)進(jìn)行重組,在重組的過程中,根據(jù)其父子關(guān)系,將相應(yīng)的類別擺放到正確的位置。/*無限極分類列表*/
public?function?getTree($data='',$cate_id=0)
{
if(empty($data)){
$data?=?$this->order('listorder')->field('id,parent_id,cate_name,listorder')->select()->toArray();
}
return?$this->_reSort($data,$cate_id);
}
//無限極分類樹狀結(jié)構(gòu),修改level值
/*?@param?$data?要遍歷的分類數(shù)組
*?@param?$parent_id?節(jié)點pid,默認(rèn)為0,表示從頂級節(jié)點開始
*?@param?$ret重組排序的所有后代節(jié)點
*?@param?$cate_level?節(jié)點層級
*/
private?function?_reSort($data,?$parent_id=0,?$cate_level=0,?$isClear=TRUE)
{
//用于保存重組排序后的結(jié)果
static?$ret?=?array();
//剛進(jìn)入函數(shù)要清除上次調(diào)用此函數(shù)后留下的靜態(tài)變量的值,進(jìn)入深一層循環(huán)時則不要清除
if($isClear)
$ret?=?array();
foreach?($data?as?$k?=>?$v)
{
if($v['parent_id']?==?$parent_id)
{
$v['cate_level']?=?$cate_level;
//找到以$parent_id為父節(jié)點的子節(jié)點,將其保存
$ret[]?=?$v;
unset($data[$k]);
//然后以該節(jié)點為父節(jié)點,繼續(xù)找后臺節(jié)點
$this->_reSort($data,?$v['id'],?$cate_level+1,?FALSE);
}
}
return?$ret;
}
調(diào)用class?Category?extends?Base
{
public?function?index()
{
$category_model?=?new?Categorys();
$categoryTree?=?$category_model->getTree();
return?view('',[
'categoryTree'?=>$categoryTree,
'left_menu'?=>?1,
]);
}
}
總結(jié)
以上是生活随笔為你收集整理的php无限分类原理,php 递归无限级分类原理和实现代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作时间证明(工作证明怎么开?)
- 下一篇: 全国旅客列车时刻表(全国各版本的列车时刻