网站导航网学 原创论文 网站设计 最新系统 最新研究 原创论文 获取论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 编程文档 > PHP > 正文

php无限级分类学习参考之对ecshop无限级分类的解析带详细注释

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/06/26

【编者按】:网学网PHP为您提供php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释参考,解决您在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;另外

网学推荐

  • ·【推荐参考】最新可过维普检测低于30%
  • ·【推荐】原创参考论文 原创资料
  • ·【推荐】原创参考论文导航
  • ·咨询参考QQ:3710167
  • ·咨询参考微信号:yclw90
  • ·扫一扫 加微信 咨询
  • ·我们提供原创参考论文和原创的参考资料!
  • ·很多朋友如果想要查重指导等,请沟通我们!
  • ·原创的论文资料参考省时间!
  • ·论文格式排版可以找我们!
  • ·论文答辩PPT格式排版定制!
  • ·程序和网站等UI设计定制!
  • ·程序设计定制!
  • ·网站设计定制!
  • ·UI设计定制!
  • ·程序和网站等UI设计定制!
  • ·原创参考论文参考定制!
  • 免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 |原创论文 |
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师