php版表格展示无限级分类,php 无限分类

发布时间:2022-11-20

本文目录一览:

  1. php无限分类怎么弄
  2. php无限级分类
  3. PHP无限级分类
  4. thinkphp无限极分类能分页显示吗
  5. PHP无限级分类怎么写啊

php无限分类怎么弄

这样来做。。 一个表分三个字段 ID 名 《父类ID》 如果为顶级类则父类ID 设为 0 如果为子类则 把子类的父类ID 设为所在《父类ID》即可。。 如果为第三层子类 则把父类ID设为第二层的 父类ID 依次!! 这样就可以无限了。。 当然。。 如果要优化的话可能就需要加一些别的字段来帮助优化了

php无限级分类

同一个表中存放父类和子类,但每一条记录都要有parent_id和category_id,最顶级分类的父id为0,然后第二层分类的父id只要是相应父类的分类id,以此类推。 显示的时候,先排序,按id就能分出来。

PHP无限级分类

主要是利用函数的递归,然后在无下级的条件下退出递归! 这个是我自己写的一个函数,无限树型的你参考下吧!

function getCategoryTree($TID, $iTable,$url,$urlPar="1=1") {
    if ($TID == 0) {
        $treeStr = $treeStr."ul id=\"tree\" class=\"lightTreeview treeview-black\"";
    }
    $sql = "select * from `$iTable` where TID1 = ".$TID." order by orderid";
    $rs = mysql_query($sql);
    while ($ary = mysql_fetch_array($rs)) {
        $treeStr = $treeStr."li";
        $rs2 = mysql_query("select count(*) from `$iTable` where TID1 = ".$ary["id"]);
        $Vcount = @mysql_result($rs2, 0);
        if ($Vcount != 0) {
            $treeStr = $treeStr."div class=\"treeview-folder\"".$ary["title"]."/divul style=\"display:none\"";
            $treeStr = $treeStr.getCategoryTree($ary["id"], $iTable,$url,$urlPar);
            $treeStr = $treeStr."/ul";
        } else {
            $treeStr = $treeStr."div class=\"treeview-file\"a href=\"".$url."?T=".$ary["id"]."".$urlPar."\" target=\"pro\"".$ary["title"]."/a/div";
        }
        $treeStr = $treeStr."/li";
    }
    @mysql_free_result($rs);
    if ($TID == 0) {
        $treeStr = $treeStr."/ul";
    }
    return $treeStr;
}

thinkphp无限极分类能分页显示吗

TreeTable是一个能把无限分类展现为表格形式的PHP类库插件,分类的层级表示为表格的列,分类的行数表格分类的总数。单元格显示分类名称。 TreeTable通过对单元格的行合并和列合并实现了无限层级也能较好的展示层级架构。

  1. 构建ID/PID/NAME的数组,后期可通过数据库生成的动态数据。 Tree算法请打开链接:
    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'=>'三级栏目二')
    )
    
  2. 导入TreeTable类库。
    import('@.ORG.Util.TableTree'); //Thinkphp导入方法
    
  3. 生成TreeTable HTML代码
    $treeTable->init($treearr);
    echo $treeTable->get_treetable();
    
    注意:get_treetable()只生产表体部门,TALBE/TABLE请自行构建。

完整代码

<?php
/**
 * File name: TreeTable.class.php
 * Author: run.gao 312854458@qq.com Date: 2012-07-24 23:22 GMT+8
 * Description: 通用的表格无限级分类
 * */
/**
 * 表格展示无限分类是将无线分类已表格的形式表现出来,更好的能体现出分类的所属关系
 * 使用方法:
 * 1. 实例化分类
 * $treeTable = new TreeTable();
 * 2. 初始化分类,$treearr必须是一个多维数组且包含 id,parentid,name字段
 * $treeTable->init($treearr);
 * 3. 获取无限分类HTML代码
 * echo $treeTable->get_treetable();
 * */
class TreeTable {
    /**
     * 生成树型结构所需要的2维数组
     * @var array
     */
    public $arr = array();
    /**
     * 表格列数
     * @var int
     */
    public $columns = 0;
    /**
     * 表格行数
     * @var int
     */
    public $rows = 0;
    /**
     * 初始化TreeTable数据
     * @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'=>'三级栏目二')
     * )
     */
    public function init($arr=array()){
        if(!is_array($arr)) return false;
        foreach ($arr as $k=>$v) {
            $this->arr[$v['id']] = $v;
        }
        foreach ($this->arr as $k => $v){
            $this->arr[$k]['column'] = $this->get_level($v['id']); // Y轴位置
            $this->arr[$k]['arrchildid'] = $this->get_arrchildid($v['id']); // 所有子节点
            $this->arr[$k]['arrparentid'] = $this->get_arrparentid($v['id']); // 所有父节点
            $this->arr[$k]['child_bottom_num'] = $this->get_child_count($v['id']); // 所有底层元素节点
        }
        $this->columns = $this->get_columns(); // 总行数
        $this->rows = $this->get_rows(); // 总列数
        // 按照arrparentid和id号进行排序
        $this->sort_arr();
        foreach ($this->arr as $k => $v){
            $this->arr[$k]['row'] = $this->get_row_location($v['id']); // X轴位置
            $this->arr[$k]['rowspan'] = $v['child_bottom_num']; // 行合并数
            $this->arr[$k]['colspan'] = $v['child_bottom_num'] == 0 ? $this->columns - $v['column'] + 1 : 0; //列合并数
        }
        return $this->get_tree_arr();
    }
    /**
     * 获取数组
     * */
    public function get_tree_arr(){
        return is_array($this->arr) ? $this->arr : false;
    }
    /**
     * 按arrparentid/id号依次重新排序数组
     * */
    public function sort_arr(){
        // 要进行排序的字段
        foreach ($this->arr as $k => $v){
            $order_pid_arr[$k] = $v['arrparentid'];
            $order_iscost[] = $v['sort'];
            $order_id_arr[$k] = $v['id'];
        }
        // 先根据arrparentid排序,再根据排序,id号排序
        array_multisort(
            $order_pid_arr, SORT_ASC, SORT_STRING,
            $order_iscost, SORT_DESC, SORT_NUMERIC,
            $order_id_arr, SORT_ASC, SORT_NUMERIC,
            $this->arr);
        // 获取每一个节点层次
        for ($column = 1; $column <= $this->columns; $column++) {
            $row_level = 0;
            foreach ($this->arr as $key => $node){
                if ($node['column'] == $column){
                    $row_level++;
                    $this->arr[$key]['column_level'] = $row_level;
                }
            }
        }
        // 重新计算以ID作为键名
        foreach ($this->arr as $k=>$v) {
            $arr[$v['id']] = $v;
        }
        $this->arr = $arr;
    }
    /**
     * 得到父级数组
     * @param int
     * @return array
     */
    public 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
     */
    public 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 $myid 当前节点ID号
     * */
    public function get_level($myid, $init = true){
        static $level = 1;
        if($init) $level = 1;
        if ($this->arr[$myid]['parentid']) {
            $level++;
            $this->get_level($this->arr[$myid]['parentid'], false);
        }
        return $level;
    }
    /**
     * 获取当前节点所有底层节点(没有子节点的节点)的数量
     * @param $myid 节点ID号
     * @param $init 第一次加载将情况static变量
     * */
    public function get_child_count($myid, $init = true){
        static $count = 0;
        if($init) $count = 0;
        if(!$this->get_child($myid) && $init) return 0;
        if($childarr = $this->get_child($myid)){
            foreach ($childarr as $v){
                $this->get_child_count($v['id'], false);
            }
        }else{
            $count++;
        }
        return $count;
    }
    /**
     * 获取节点所有子节点ID号
     * @param $catid 节点ID号
     * @param $init 第一次加载将情况static初始化
     * */
    public function get_arrchildid($myid, $init = true) {
        static $childid;
        if($init) $childid = '';
        if(!is_array($this->arr)) return false;
        foreach($this->arr as $id => $a){
            if($a['parentid'] == $myid) {
                $childid = $childid ? $childid.','.$a['id'] : $a['id'];
                $this->get_arrchildid($a['id'], false);
            }
        }
        return $childid ;
    }
    /**
     * 获取该节点所有父节点ID号
     * @param $id 节点ID号
     * */
    public function get_arrparentid($id, $arrparentid = '') {
        if(!is_array($this->arr)) return false;
        $parentid = $this->arr[$id]['parentid'];
        if($parentid > 0) $arrparentid = $arrparentid ? $parentid.','.$arrparentid : $parentid;
        if($parentid) $arrparentid = $this->get_arrparentid($parentid, $arrparentid);
        return $arrparentid;
    }
    /**
     * 获取节点所在地行定位
     * @param $myid 节点ID号
     */
    public function get_row_location($myid){
        $nodearr = $this->arr;
        // 获取每一个节点所在行的位置
        foreach ($nodearr as $key => $node){
            if($myid == $node['id']) {
                $node_row_count = 0;
                $arrparentid = explode(',', $node['arrparentid']);
                // 所有父节点小于当前节点层次的底层节点等于0的元素
                foreach ($arrparentid as $pid){
                    foreach ($nodearr as $node_row){
                        if($node_row['column'] == $nodearr[$pid]['column'] && $nodearr[$pid]['column_level'] > $node_row['column_level'] && $node_row['child_bottom_num'] == 0){
                            $node_row_count ++;
                        }
                    }
                }
                // 所有当前节点并且节点层次(rowid_level)小于当前节点层次的个数
                foreach ($nodearr as $node_row){
                    if($node['column'] == $node_row['column'] && $node_row['column_level'] < $node['column_level']){
                        $node_row_count += $node_row['child_bottom_num'] ? $node_row['child_bottom_num'] : 1;
                    }
                }
                $node_row_count++;
                break;
            }
        }
        return $node_row_count;
    }
    /**
     * 获取表格的行数
     * */
    public function get_rows(){
        $rows = 0;
        foreach ($this->arr as $key => $node){
            if($node['child_bottom_num'] == 0){
                $rows++; // 总行数
            }
        }
        return $rows;
    }
    /**
     * 获取表格的列数
     * */
    public function get_columns(){
        $columns = 0 ;
        foreach ($this->arr as $key => $node){
            if($node['column'] > $columns){
                $columns = $node['column']; // 总列数
            }
        }
        return $columns;
    }
    /**
     * 获取分类的表格展现形式(不包含表头)
     * */
    public function get_treetable(){
        $table_string = '';
        for($row = 1; $row <= $this->rows; $row++){
            $table_string .= "\r\t<tr>";
            foreach ($this->arr as $v){
                if($v['row'] == $row){
                    $rowspan = $v['rowspan'] ? "rowspan='{$v['rowspan']}'" : '';
                    $colspan = $v['colspan'] ? "colspan='{$v['colspan']}'" : '';
                    $table_string .= "\r\t\t<td {$rowspan} {$colspan}>\r\n{$v['name']}\r\n</td>";
                }
            }
            $table_string .= "\r\t</tr>";
        }
        return $table_string;
    }
}
?>

PHP无限级分类怎么写啊

<?php
/*========================================================
类名:catalog
功能:无限分级类
方法:
树形显示分类
catalog_show($id) //参数$id 递归调用
流程:找到父分类为0所有根分类- 一直递归取得所有分类并显示
添加分类
catalog_add($uid,$name) //$uid 父id //$name 分类名
流程:依据$uid,在此id下添加一个新子id
删除分类
catalog_del($uid)//参数 $uid 数要删除的分类
修改分类
catalog_set($id,$name) //参数 $id 要修改的分类 //参数 $name 新的分类名
变量:
$config //数据库信息- host,user,pass,dbname
$catalog_dbname //分类数据库名
数据库:
catalog_id //分类的自然序号
catalog_uid //分类的父分类
catalog_name //分类名
catalog_path_number //亲缘树数字形式 0:1:2
catalog_path_char //亲缘树字符形式 分类1:分类1.1:分类1.1.1
参照文章
========================================================*/
class catalog{
    var $config;
    var $catalog_dbname;
    var $links;
    private function connect(){
        $this->links = mysql_connect($this->config['host'],$this->config['user'],$this->config['pass']) or die("错误: 第".__LINE__."行<br>".mysql_error());
        mysql_select_db($this->config['dbname'],$this->links);
        mysql_query("SET NAMES gb2312");
    }
    function catalog_show($uid = 0){
        $this->connect();
        $sql = "Select * FROM ".$this->catalog_dbname.
        " Where catalog_uid = ". $uid .
        " orDER BY catalog_id ";
        $result = mysql_query($sql,$this->links) or die("错误: 第".__LINE__."行<br>".mysql_error());
        if(mysql_num_rows($result) > 0){
            while ($row = mysql_fetch_assoc($result)){
                if($this->sun_catalog($row['catalog_id'])){ //判断有没有子分类
                    $cata_img = "<img id = 'img".$row['catalog_id']."' src='./img/last_node.jpg' ōnclick='click_catalog(".$row['catalog_id'].")'/>";
                }else{
                    $cata_img = "<img src='./img/sp.jpg'/>";
                }
                $path = explode(":",$row['catalog_path_number']);
                if(count($path) > 1){
                    for($i=1;$i<count($path);$i++){
                        $path_img .= "<img src='./img/sp.jpg'/>";
                    }
                }
                echo $path_img.$cata_img;
                echo "<a class='menu' href = 'javascript:send_id(".$row['catalog_id'].")'>";
                echo $row['catalog_name']."</a><br>";
                $path_img = "";
                if($this->sun_catalog($row['catalog_id'])){
                    $hidden_div = "style='display:none'";
                    echo "<div id = 'div".$row['catalog_id']."' ".$hidden_div.">";
                    $this->catalog_show($row['catalog_id']);
                    echo "</div>";
                }
            }
        }
    }
    private function sun_catalog($uid){ //判断是否有子分类
        $sql = "Select * FROM ".$this->catalog_dbname.
        " Where catalog_uid = ". $uid .
        " orDER BY catalog_id ";
        $result = mysql_query($sql,$this->links) or die("错误: 第".__LINE__."行<br>".mysql_error());
        if(mysql_num_rows($result) > 0){
            return true;
        }else{
            return false;
        }
    }
    function catalog_add($uid,$name){
        //获取父id的亲缘树
        $this->connect();
        $sql = "Select * FROM ".$this->catalog_dbname.
        " Where catalog_id = '".$uid."'";
        $result = mysql_query($sql,$this->links)
        or die("错误: 第".__LINE__."行<br>".mysql_error());
        $row = mysql_fetch_assoc($result);
        $fid_path_number = $row['catalog_path_number']; //id的数字亲缘树
        $fid_path_char = $row['catalog_path_char']; //id的字符亲缘树
        //插入数据 先插入行-再找到最新插入的id, 再依据这个id进行修改
        $sql = "Insert INTO ".$this->catalog_dbname."(catalog_uid,catalog_name)
        VALUES(".$uid.",'".$name."')";
        $result = mysql_query($sql,$this->links)
        or die("错误: 第".__LINE__."行<br>".mysql_error());
        $catalog_id = mysql_insert_id(); //获取自己的id
        $catalog_path_number = $fid_path_number.":".$catalog_id; //得到自己的数字亲缘数
        $catalog_path_char = $fid_path_char.":".$name; //得到自己的字符亲缘数
        $sql = "Update '".$this->catalog_dbname."'
        SET
        catalog_path_number = '".$catalog_path_number."',
        catalog_path_char = '".$catalog_path_char."'
        Where
        catalog_id = ".$catalog_id;
        mysql_query($sql,$this->links)
        or die("错误: 第".__LINE__."行<br>".mysql_error());
    }
    function catalog_del($id){
        $this->connect();
        $sql = "Delete FROM ".$this->catalog_dbname.
        " Where catalog_id = ".$id;
        mysql_query($sql,$this->links)
        or die("错误: 第".__LINE__."行<br>".mysql_error());
    }
    function catalog_set($id,$name){
        $this->connect();
        $sql = "Update ".$this->catalog_dbname."
        SET
        catalog_name = '".$name."'
        Where
        catalog_id = ".$id;
        mysql_query($sql,$this->links)
        or die("错误: 第".__LINE__."行<br>".mysql_error());
    }
}
?>