通用树形下拉菜单生成类

<?php
/**
* 通用的树型类,可以生成任何树型结构
*/
class tree
{
    /**
    * 生成树型结构所需要的2维数组
    * @var array
    */
    var $arr = array();
 
    /**
    * 生成树型结构所需修饰符号,可以换成图片
    * @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][‘pid‘];
        $pid = $this->arr[$pid][‘pid‘];
        if(is_array($this->arr))
        {
            foreach($this->arr as $id => $a)
            {
                if($a[‘pid‘] == $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[‘pid‘] == $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][‘pid‘];
        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;
    }
 
    /**
    * 得到树型结构
    * @param int ID,表示获得这个ID下的所有子级
    * @param string 生成树型结构的基本代码,例如:"<option value=\$id \$selected>\$spacer\$name</option>"
    * @param int 被选中的ID,比如在做树型下拉框的时候需要用到
    * @return string
    */
    function get_tree($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 = $id==$sid ? "selected" : ‘‘;
                @extract($a);
                eval("\$nstr = \"$str\";");
                $this->ret .= $nstr;
                $this->get_tree($id,$str,$sid,$adds.$k.‘&nbsp;‘);
                $number++;
            }
        }
        return $this->ret;
    }
}
?>

在所有栏目、地区等下拉菜单中,这个类非常好用。
使用方法:

<?php
include("tree.class.php");
//具有这个结构的数组,不是这样的话,可以改类的实现
 
 $list=array(
       1 => array(‘id‘=>‘1‘,‘pid‘=>0,‘name‘=>‘一级栏目一‘),
       2 => array(‘id‘=>‘2‘,‘pid‘=>0,‘name‘=>‘一级栏目二‘),
       3 => array(‘id‘=>‘3‘,‘pid‘=>1,‘name‘=>‘二级栏目一‘),
       4 => array(‘id‘=>‘4‘,‘pid‘=>1,‘name‘=>‘二级栏目二‘),
       5 => array(‘id‘=>‘5‘,‘pid‘=>2,‘name‘=>‘二级栏目三‘),
       6 => array(‘id‘=>‘6‘,‘pid‘=>3,‘name‘=>‘三级栏目一‘),
       7 => array(‘id‘=>‘7‘,‘pid‘=>3,‘name‘=>‘三级栏目二‘)
     );
 
$tree=new tree($list);
 
$html="<select name=‘cat‘>";
 
//格式字符串
$str="<option value=\$id \$selected>\$spacer\$name</option>";
 
//返回树
$html.=$tree->get_tree(0,$str);
 
$html.="</select>";
 
echo($html);
?>
时间: 2024-10-05 03:41:59

通用树形下拉菜单生成类的相关文章

解决element生成的下拉菜单,不在父级之下,而是在body之下,通过父级控制该下拉菜单的样式,达到不跟别的地方冲突的目的

项目中存在多个下拉菜单,每个下拉菜单的样式可能不同 不能直接拿到element里面的类名来修改,这样会导致全局统一 在下拉菜单上定义一个父级类名,通过这个父级类名来定义这些下拉菜单的样式,达到私有化 遇到问题,生成的下拉菜单跟父类不在同一个节点,无法通过父级类来指定样式 解决方案:在下拉菜单的结构上添加 ref,页面加载后动态添加父级类名 原文地址:https://www.cnblogs.com/wuhefeng/p/12530803.html

三级下拉菜单 (通用版)

<html><head><title>阿里西西网页特效演示, 三级下拉菜单 (通用版)</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head><body> <SCRIPT LANGUAGE="JavaScript"><!--functi

生成时间下拉菜单【有待完善】

<?php header('content-type:text/html;charset="utf-8"'); date_default_timezone_set('PRC'); //设置中国时区 $amstart = '17:00'; //AM $amend = '18:00'; //PM $pmstart = '18:30'; $pmend = '19:30'; function getoption($amstart,$amend,$pmstart,$pmend){ $ams

通用无限极下拉菜单

下拉菜单在我开发中经常遇到,但是没个项目都需要从新编写,改起来虽然简单但是很麻烦,我这个人还是比较懒的,今天有时间把我以前的项目开发中的菜单整理一遍,编写一个通用版本,以后就不需要那么麻烦了. 特点 今天整理的菜单是由jquery+css开发有如下特点: 一.通用性强 以前在用的一个下拉菜单有个问题,需要对主导航和子菜单进行单独的设置,比如,二级菜单是class="first_menu",三级菜单是class="second_menu"....依次类推,这样的写法有

巧用CSS3 :target 伪类制作Dropdown下拉菜单(无JS)

:target 是CSS3 中新增的一个伪类,用以匹配当前页面的URI中某个标志符的目标元素(比如说当前页面URL下添加#comment就会定位到id=“comment”的位置,俗称锚).CSS3 为这个动作赋予了更加多的功能——就如同:hover 一样你可以做一些样式定义. 先上效果图 正如标题所说,本文是教你如何巧用CSS3 :target 伪类制作Dropdown下拉菜单,原生HTML+CSS,无JavaScript.为了吸引各位往下看,先上实际例子,再进行剖析. Duang~ 实际例子其

css自定义下拉菜单,通过伪类控制展开隐藏

公司最近要做组件库,一些单选框,复选框,下拉菜单都需要美观自定义, 闲余时间做了一个(对浏览器要求较高的)下拉菜单的组件. /*********实现功能 start **************/ 通过css伪类:focus实现下拉菜单基本功能 select: 点击菜单(动画过渡)展开,再次点击(动画过渡)收起; 并保证点击页面空白处和选择option同样(动画过渡)收起菜单. option: 限制5条内容的高度,超出则滚动条,反之则自适应高度; /***********实现功能end*****

配置时间生成下拉菜单

<?php //设置时区 date_default_timezone_set('PRC'); //设置中国时区 ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>配置时间生成下拉菜单</title> <link rel="stylesheet" type="text/css" hre

使用POI生成具有三级下拉菜单的Excel文档

曾在工作中遇到这种需求,研究很久编码出一个方法,提供于此供大家参考. 效果图如下: 开始贴代码,代码中部分测试数据不影响功能. 第一部分(核心处理): 此部分包含几个方面: 获取三级下拉框各列的数据: 创建每个下拉功能的名称管理器 在隐藏的sheet中生成下拉菜单所需要的row 代码如下: /** * 第一部分 * 将三个列表所有字段从数据库查询出,并生成名称管理器,存放至隐藏的sheet中 */ private static HSSFWorkbook writePorpData() { int

图片、图标类、下拉菜单、按钮、按钮组

<!DOCTYPE html> <html> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title></title> <link rel="stylesheet" href="bootstrap.mi