分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

PHP无限分类封装

发布时间:2023-09-06 01:14责任编辑:郭大石关键词:PHP
<?php/** +------------------------------------------------ * 通用的树型类 +------------------------------------------------ * @author yangyunzhou@foxmail.com +------------------------------------------------ * @date 2010年11月23日10:09:31 +------------------------------------------------ */class Tree{ ??????/** ????+------------------------------------------------ ????* 生成树型结构所需要的2维数组 ????+------------------------------------------------ ????* @author yangyunzhou@foxmail.com ????+------------------------------------------------ ????* @var Array ????*/ ???var $arr = array(); ??????/** ????+------------------------------------------------ ????* 生成树型结构所需修饰符号,可以换成图片 ????+------------------------------------------------ ????* @author yangyunzhou@foxmail.com ????+------------------------------------------------ ????* @var Array ????*/ ???var $icon = array(‘│‘,‘├‘,‘ └‘); ??????/** ???* @access private ???*/ ???var $ret = ‘‘; ??????/** ???* 构造函数,初始化类 ???* @param array 2维数组,例如: ???* array( ???* ?????1 => array(‘id‘=>‘1‘,‘parentid‘=>0,‘name‘=>‘一级栏目一‘), ???* ?????2 => array(‘id‘=>‘2‘,‘parentid‘=>0,‘name‘=>‘一级栏目二‘), ???* ?????3 => array(‘id‘=>‘3‘,‘parentid‘=>1,‘name‘=>‘二级栏目一‘), ???* ?????4 => array(‘id‘=>‘4‘,‘parentid‘=>1,‘name‘=>‘二级栏目二‘), ???* ?????5 => array(‘id‘=>‘5‘,‘parentid‘=>2,‘name‘=>‘二级栏目三‘), ???* ?????6 => array(‘id‘=>‘6‘,‘parentid‘=>3,‘name‘=>‘三级栏目一‘), ???* ?????7 => array(‘id‘=>‘7‘,‘parentid‘=>3,‘name‘=>‘三级栏目二‘) ???* ?????) ???*/ ???function tree($arr=array()) ???{ ??????$this->arr = $arr; ??????$this->ret = ‘‘; ??????return is_array($arr); ???} ??????/** ???* 得到父级数组 ???* @param int ???* @return array ???*/ ???function get_parent($myid) ???{ ???????$newarr = array(); ???????if(!isset($this->arr[$myid])) return false; ???????$pid = $this->arr[$myid][‘parentid‘]; ???????$pid = $this->arr[$pid][‘parentid‘]; ???????if(is_array($this->arr)) ???????{ ???????????foreach($this->arr as $id => $a) ???????????{ ???????????????if($a[‘parentid‘] == $pid) $newarr[$id] = $a; ???????????} ???????} ???????return $newarr; ???} ??????/** ???* 得到子级数组 ???* @param int ???* @return array ???*/ ???function get_child($myid) ???{ ???????$a = $newarr = array(); ???????if(is_array($this->arr)) ???????{ ???????????foreach($this->arr as $id => $a) ???????????{ ???????????????if($a[‘parentid‘] == $myid) $newarr[$id] = $a; ???????????} ???????} ???????return $newarr ? $newarr : false; ???} ??????/** ???* 得到当前位置数组 ???* @param int ???* @return array ???*/ ???function get_pos($myid,&$newarr) ???{ ???????$a = array(); ???????if(!isset($this->arr[$myid])) return false; ???????$newarr[] = $this->arr[$myid]; ???????$pid = $this->arr[$myid][‘parentid‘]; ???????if(isset($this->arr[$pid])) ???????{ ???????????$this->get_pos($pid,$newarr); ???????} ???????if(is_array($newarr)) ???????{ ???????????krsort($newarr); ???????????foreach($newarr as $v) ???????????{ ???????????????$a[$v[‘id‘]] = $v; ???????????} ???????} ???????return $a; ???} ??????/** ????* ------------------------------------- ????* ?得到树型结构 ????* ------------------------------------- ????* @author yangyunzhou@foxmail.com ????* @param $myid 表示获得这个ID下的所有子级 ????* @param $str 生成树形结构基本代码, 例如: "<option value=\$id \$select>\$spacer\$name</option>" ????* @param $sid 被选中的ID, 比如在做树形下拉框的时候需要用到 ????* @param $adds ????* @param $str_group ????*/ ???function get_tree($myid, $str, $sid = 0, $adds = ‘‘, $str_group = ‘‘) ???{ ???????$number=1; ???????$child = $this->get_child($myid); ???????if(is_array($child)) { ???????????$total = count($child); ???????????foreach($child as $id=>$a) { ???????????????$j=$k=‘‘; ???????????????if($number==$total) { ???????????????????$j .= $this->icon[2]; ???????????????} else { ???????????????????$j .= $this->icon[1]; ???????????????????$k = $adds ? $this->icon[0] : ‘‘; ???????????????} ???????????????$spacer = $adds ? $adds.$j : ‘‘; ???????????????$selected = $id==$sid ? ‘selected‘ : ‘‘; ???????????????@extract($a); ???????????????$parentid == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";"); ???????????????$this->ret .= $nstr; ???????????????$this->get_tree($id, $str, $sid, $adds.$k.‘&nbsp;‘,$str_group); ???????????????$number++; ???????????} ???????} ???????return $this->ret; ???} ??????/** ???* 同上一方法类似,但允许多选 ???*/ ???function get_tree_multi($myid, $str, $sid = 0, $adds = ‘‘) ???{ ???????$number=1; ???????$child = $this->get_child($myid); ???????if(is_array($child)) ???????{ ???????????$total = count($child); ???????????foreach($child as $id=>$a) ???????????{ ???????????????$j=$k=‘‘; ???????????????if($number==$total) ???????????????{ ???????????????????$j .= $this->icon[2]; ???????????????} ???????????????else ???????????????{ ???????????????????$j .= $this->icon[1]; ???????????????????$k = $adds ? $this->icon[0] : ‘‘; ???????????????} ???????????????$spacer = $adds ? $adds.$j : ‘‘; ??????????????????$selected = $this->have($sid,$id) ? ‘selected‘ : ‘‘; ???????????????@extract($a); ???????????????eval("\$nstr = \"$str\";"); ???????????????$this->ret .= $nstr; ???????????????$this->get_tree_multi($id, $str, $sid, $adds.$k.‘&nbsp;‘); ???????????????$number++; ???????????} ???????} ???????return $this->ret; ???} ??????function have($list,$item){ ???????return(strpos(‘,,‘.$list.‘,‘,‘,‘.$item.‘,‘)); ???} ??????/** ????+------------------------------------------------ ????* 格式化数组 ????+------------------------------------------------ ????* @author yangyunzhou@foxmail.com ????+------------------------------------------------ ????*/ ???function getArray($myid=0, $sid=0, $adds=‘‘) ???{ ???????$number=1; ???????$child = $this->get_child($myid); ???????if(is_array($child)) { ???????????$total = count($child); ???????????foreach($child as $id=>$a) { ???????????????$j=$k=‘‘; ???????????????if($number==$total) { ???????????????????$j .= $this->icon[2]; ???????????????} else { ???????????????????$j .= $this->icon[1]; ???????????????????$k = $adds ? $this->icon[0] : ‘‘; ???????????????} ???????????????$spacer = $adds ? $adds.$j : ‘‘; ???????????????@extract($a); ???????????????$a[‘name‘] = $spacer.‘ ‘.$a[‘name‘]; ???????????????$this->ret[$a[‘id‘]] = $a; ???????????????$fd = $adds.$k.‘&nbsp;‘; ???????????????$this->getArray($id, $sid, $fd); ???????????????$number++; ???????????} ???????} ??????????return $this->ret; ???}}?>用法: ??$tree = new Tree; ??????????// new 之前请记得包含tree文件!$tree->tree($data); ????????// 数据格式请参考 tree方法上面的注释! ??// 如果使用数组, 请使用 getArray方法$tree->getArray(); ??// 下拉菜单选项使用 get_tree方法$tree->get_tree();

PHP无限分类封装

原文地址:http://www.cnblogs.com/lglblogadd/p/7607696.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved