ecshop无限处理分类
2015-12-31 18:27
471 查看
<?php function get_cate($arr){ static $cat_options = array(); if (!isset($cat_options[0])) { $level = $last_cat_id = 0; $options = $cat_id_array = $level_array = array(); if ($data === false) { 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; } // end if ($level == 0 && $last_cat_id == 0) 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) { /* 判断是否是有跨级的,如 $array = array(1=>'', 2=>'', 3=>'', 4=>'' 5=>'') $array[3],$array[5]之间,由于在array[4]时,此时为末节点 此时会由 $last_cat_id = array_pop($cat_id_array); 所以会导致 array[3]独立出来,这样就必须加上 */ 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; } } // eof if ($value['parent_id'] == $last_cat_id) elseif ($value['parent_id'] > $last_cat_id) { break; } // eof if ($value['parent_id'] == $last_cat_id) } // end foreach ------------ $count = count($cat_id_array); if ($count > 1) { $last_cat_id = array_pop($cat_id_array); } elseif ($count == 1) { //由于上一级的原因,会导致 $last_cat_id是子节点 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 ------------ //如果数组过大,不采用静态缓存方式 if (count($options) <= 2000) { write_static_cache('cat_option_static', $options); } } else { $options = $data; } $cat_options[0] = $options; } else { $options = $cat_options[0]; } if (!$spec_cat_id) { return $options; } 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; } }
相关文章推荐
- 将内网网站发布到外网上的工具Localtunnel
- linux shell 脚本30分钟教程
- linux学习笔记:dstat命令详解
- Windows环境下tomcat配置日志输出
- 马哥linux学习笔记:htop命令使用详解
- Linux操作系统下查看硬件信息的命令总结
- Nginx+Tomcat配置转发到不同域名下的不同项目
- linux scp
- linux系统启动流程详解
- DOM中Property与Attribute的区别
- 收藏一些效果炫酷的可视化网站
- tomcat下普通网址配置
- Linux 命令之fuser
- 第一课 OpenGL
- Libc堆管理机制及漏洞利用技术 (一)
- htop/dstat/top/ps命令的使用
- tomcat manager配置
- 马哥linux学习笔记:top命令的使用
- 关于某招聘网站简历自动刷新的探索思路
- Linux 命令之mount