天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

php 無限級分類學習參考之對ecshop無限級分類的解析 帶詳細注釋

復制代碼 代碼如下:
function cat_options($spec_cat_id, $arr)
{
static $cat_options = array();
if (isset($cat_options[$spec_cat_id]))
{
return $cat_options[$spec_cat_id];
}
/*
初始化關鍵參數:
$level:當前子節點深度
$last_cat_id:當前父節點ID
$options:帶有縮進級別的數組
$cat_id_array:沿同一路徑的父節點依次進駐
$level_array:該節點的子節點深度,也是依次進駐
*/
if (!isset($cat_options[0]))
{
$level = $last_cat_id = 0;
$options = $cat_id_array = $level_array = array();
while (!empty($arr))//如果還有待構造的節點則繼續遍歷
{
foreach ($arr AS $key => $value)
{
$cat_id = $value['cat_id'];
//一級分類結點
if ($level == 0 && $last_cat_id == 0)
{
if ($value['parent_id'] > 0)
{
break;
}
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name'];
//遍歷過了就不再遍歷
unset($arr[$key]);
if ($value['has_children'] == 0)
{
continue;
}
$last_cat_id = $cat_id;//下層結點的父親結點
$cat_id_array = array($cat_id);
$level_array[$last_cat_id] = ++$level;
continue;
}
//當前結點的父親結點ID等于它的上一級結點ID
if ($value['parent_id'] == $last_cat_id)
{
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level;
$options[$cat_id]['id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name'];
unset($arr[$key]);//遍歷過了就不再遍歷
//如果當前結點有孩子則當前結點要進駐,但不再遍歷;反之不進駐也不再遍歷
if ($value['has_children'] > 0)
{
if (end($cat_id_array) != $last_cat_id)
{
$cat_id_array[] = $last_cat_id;
}
$last_cat_id = $cat_id;//當現結點做為下一級結點的新的父親結點
$cat_id_array[] = $cat_id;//進駐

$level_array[$last_cat_id] = ++$level;//當前結點的下一級結點深度
}

}
elseif ($value['parent_id'] > $last_cat_id)
{//如果當前結點父親深度大于目前父親結點的深度則進行下一輪循環
break;
}
}//endforeach
$count = count($cat_id_array);
if ($count > 1)
{
//取出最后進駐的父親節點作為當前父親節點
$last_cat_id = array_pop($cat_id_array);
}
elseif ($count == 1)
{
if ($last_cat_id != end($cat_id_array))
{
//進駐的父親結點只有一個時并且沒有作為當前父親節點時把它取出
$last_cat_id = end($cat_id_array);
}
else
{ //否則最后取出的父親結點一定是一級分類結點
$level = 0;
$last_cat_id = 0;
$cat_id_array = array();
continue;
}
}

if ($last_cat_id && isset($level_array[$last_cat_id]))
{
//取出當前結點的深度
$level = $level_array[$last_cat_id];
}
else
{
$level = 0;
}
}//end while,此時已完成非遞歸前序遍歷構造樹的工作,其中$options已保存了從根結點開始的所有結點帶有分層性質的數組
$cat_options[0] = $options;
}
else
{
$options = $cat_options[0];
}
//如果從0開始即取整個樹則直接返回不再處理.
if (!$spec_cat_id)
{
return $options;
}
//否則開始從指定結點截取,以下比較簡單我還是稍微說說吧,要說就說幾個參數含義吧
/*
$spec_cat_id_level:截取結點的深度
$spec_cat_id_array:最終返回的以該結點為根結點的一棵商品分類樹
最終返回的數組是這樣排序的:按父親結點大小,按直接父親結點,按同一父親結點這樣的先根遍歷,具個例子:
一級結點有1,5 二級結點有2,6,7 三級結點有8,9,如果1的直接孩子是2,6而2的直接孩子是8,9;另外
5的直接孩子是7那么最終的數組是這樣排列的1->2->8->9->6->5->7
*/
else
{
if (empty($options[$spec_cat_id]))
{
return array();
}
$spec_cat_id_level = $options[$spec_cat_id]['level'];

foreach ($options AS $key => $value)
{
if ($key != $spec_cat_id)
{
unset($options[$key]);
}
else
{
break;
}
}
$spec_cat_id_array = array();
foreach ($options AS $key => $value)
{
if (($spec_cat_id_level == $value['level'] && $value['cat_id'] != $spec_cat_id) ||
($spec_cat_id_level > $value['level']))
{
break;
}
else
{
$spec_cat_id_array[$key] = $value;
}
}
$cat_options[$spec_cat_id] = $spec_cat_id_array;
return $spec_cat_id_array;
}
}

php技術php 無限級分類學習參考之對ecshop無限級分類的解析 帶詳細注釋,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成人在线网站 | 男女交性视频无遮挡全过程 | www.99在线| 国产精自产拍久久久久久蜜 | 国产人妖一区二区 | 97综合久久 | 亚洲白色白色在线播放 | 亚洲人成人毛片无遮挡 | 69国产精品人妻无码免费 | 国产免费内射又粗又爽密桃视频 | 热热久久这里只有精品 | 国产真实强被迫伦姧女在线观看 | 青草国产在线视频免费 | 欧美 亚洲 日韩 在线综合 | 日韩精品免费在线观看 | 日韩一区二区三区免费体验 | rio 快播| 果冻传媒完整免费网站在线观看 | 欧美激情一区二区三区AA片 | 在线亚洲视频无码天堂 | 囯产免费精品一品二区三区视频 | 中文在线观看永久免费 | 黄桃AV无码免费一区二区三区 | 亚洲一区免费香蕉在线 | 羞羞影院午夜男女爽爽免费 | 久久久久久久网站 | 亚洲成A人片在线观看中文不卡 | 色橹橹欧美在线观看视频高清 | 色婷婷综合久久久中文字幕 | 野花韩国高清完整版在线 | 色拍拍噜噜噜啦啦新网站 | 日本亚洲精品色婷婷在线影院 | 强行撕开衣服捏胸黄文 | 一本道dvd久久综合高清免费 | 日本aaaa| 亚洲野狼综合网站 | A级韩国乱理伦片在线观看 a级成人免费毛片完整版 | 全黄H全肉细节文短篇 | 中文字幕在线视频网站 | 妖精视频在线观看高清 | 老司机无码精品A |