php无限分类原理,php 递归无限级分类原理和实现代码
遞歸無(wú)限級(jí)分類(lèi)的原理:
每一個(gè)分類(lèi)都記錄它的父級(jí)id,當(dāng)為頂級(jí)分類(lèi)時(shí),父級(jí)id為0。這樣無(wú)論哪個(gè)分類(lèi),都可以通過(guò)父級(jí)id一層一層去查明它的所有父級(jí),以便清楚知道它所屬何種分類(lèi),層級(jí)深度為幾。
對(duì)數(shù)據(jù)進(jìn)行重組,在重組的過(guò)程中,根據(jù)其父子關(guān)系,將相應(yīng)的類(lèi)別擺放到正確的位置。/*無(wú)限極分類(lèi)列表*/
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);
}
//無(wú)限極分類(lèi)樹(shù)狀結(jié)構(gòu),修改level值
/*?@param?$data?要遍歷的分類(lèi)數(shù)組
*?@param?$parent_id?節(jié)點(diǎn)pid,默認(rèn)為0,表示從頂級(jí)節(jié)點(diǎn)開(kāi)始
*?@param?$ret重組排序的所有后代節(jié)點(diǎn)
*?@param?$cate_level?節(jié)點(diǎn)層級(jí)
*/
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)時(shí)則不要清除
if($isClear)
$ret?=?array();
foreach?($data?as?$k?=>?$v)
{
if($v['parent_id']?==?$parent_id)
{
$v['cate_level']?=?$cate_level;
//找到以$parent_id為父節(jié)點(diǎn)的子節(jié)點(diǎn),將其保存
$ret[]?=?$v;
unset($data[$k]);
//然后以該節(jié)點(diǎn)為父節(jié)點(diǎn),繼續(xù)找后臺(tái)節(jié)點(diǎn)
$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 递归无限级分类原理和实现代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 工作时间证明(工作证明怎么开?)
- 下一篇: 全国旅客列车时刻表(全国各版本的列车时刻