PHP实现多级分类生成树的方法示例


Posted in PHP onFebruary 07, 2017

本文实例讲述了PHP实现多级分类生成树的方法。分享给大家供大家参考,具体如下:

条件,数据库里分类是按id,fid(父ID)实现多级分类的!

使用方法:

$sql ="XXXXXXXXXX";   //sql语句
$res = $db->Select($sql);  //执行sql
$list=array();
treeList(treeGet($res),$list);  /生成树
print_r($res);  //打印出来看看!

使用结果:

┣推荐新闻啊
┃┣国际新闻
┃┣dfffffg
┃┣ttttttt
┃┃┗yyyyy

代码如下:

/**
* 选择SQL涵数
*
* @access public
* @param Array  $field  字段信息,支持涵数
* @param Array  $table  数据库表
* @param Array  $where  条件
* @return SQL SQL语句
*/
function treeGet($data)
{
  $tmptree=null;
  $tree=$data;
  return treeAddNodeToTree($tmptree,treegetbyuid($tree,0,@$field),$tree);
}
/**
*插入SQL涵数
*
* @access public
* @param Array  $fieldResult  字段信息,支持涵数
* @param Array  $table  数据库表
* @return SQL SQL语句
*/
function treeAddNodeToTree($Node,$miniTree,&$source)
{
  if(is_array($miniTree)) {
    foreach($miniTree as $k=>$v)
    {
      if(!count($miniTree[$k]['child']=treeAddNodeToTree($miniTree[$k],treegetbyuid($source,@$v['id']),$source)))
      {
        unset($miniTree[$k]['child']);
        $miniTree[$k]['leaf']=true; //设置叶结点
      }
    }
    return $Node['child']=$miniTree;
  }
}
function treegetbyuid(&$stree,$uid)
{
  $dtree=array();
  if(is_array($stree)){
    foreach($stree as $k=>$v)
    {
      if($v['fid']==$uid)
      {
        $mytmp=array();
        $mytmp=$v;
        unset($stree[$k]);
        array_push($dtree,$mytmp);
        $mytmp=null;
      }
    }
  }
  return $dtree;
}
/**
*更新SQL涵数
*
* @access public
* @param Array  $fieldResult  字段信息,支持涵数
* @param Array  $table  数据库表
* @param Array  $where  条件
* @return SQL SQL语句
*/
function treeMakeDeep($deep)
{
  $returnValue="";
  for (;$deep;$deep--)
  {
    $returnValue.="┃";
  }
  return $returnValue."┣";
}
function treeList($treeData,&$List)
{
  static $deep=0;
  if(is_array($treeData))
  {
    foreach($treeData as $k=>$v)
    {
      $v['deepValue']=treeMakeDeep($deep);
      $v['deep']=$deep;
      $t=$v;
      unset($t['child']);
      array_push($List,$t);
      if($v['child'])
      {
        ++$deep;
        $optionsNode.=treeList($v['child'],$List);
        $deep--;
      }
    }
    if($lastV=array_pop($List))
    {
      $lastV['deepValue']=str_replace('┣','┗',$lastV['deepValue']);
      array_push($List,$lastV);
    }
  }
}
function treeSelect($tree,$id,$options="child")
{
  switch(strtolower($options))
  {
    case"child":
    $tmpTree=array();
    $deep=-1;
    foreach($tree as $k=>$v)
    {
      if($id==$v['id'])
      {
        array_push($tmpTree,$v);
        $deep=$v['deep'];
      } elseif($deep!=-1)
      {
        if($v['deep']<=$deep)
        {
          break;
        } else
        {
          array_push($tmpTree,$v);
        }
      }
    }
    break;
    case "remove":
    default:
    $tmpTree=array();
    $deep=-1;
    foreach($tree as $k=>$v)
    {
      if($id==$v['id'])
      {
        $deep=$v['deep'];
        continue;
      } elseif($deep!=-1)
      {
        if($v['deep']<=$deep)
        {
          array_push($tmpTree,$v);
          $deep=-1;
        }
        continue;
      }
      array_push($tmpTree,$v);
    }
  }
  return $tmpTree;
}

PS:为方便读者阅读源码,上述代码使用了在线工具http://tools.3water.com/code/3water_php_format进行了格式化处理。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
计算2000年01月01日起到指定日的天数
Oct 09 PHP
一周让你学会PHP 不错的学习资料
Feb 06 PHP
PHP之COOKIE支持详解
Sep 20 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
Oct 25 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
PHP常用数组函数介绍
Jul 28 PHP
php使用PDO方法详解
Dec 27 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
Mar 18 PHP
php中array_multisort对多维数组排序的方法
Jun 21 PHP
PHP实现数据库的增删查改功能及完整代码
Apr 18 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 #PHP
php实现图片按比例截取的方法
Feb 06 #PHP
php实现的中文分词类完整实例
Feb 06 #PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 #PHP
php使用变量动态创建类的对象用法示例
Feb 06 #PHP
PHP单例模式定义与使用实例详解
Feb 06 #PHP
PHP第三方登录―QQ登录实现方法
Feb 06 #PHP
You might like
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
python函数参数*args**kwargs用法实例
2013/12/04 Python
Python datetime时间格式化去掉前导0
2014/07/31 Python
python下载文件时显示下载进度的方法
2015/04/02 Python
Python中的元类编程入门指引
2015/04/15 Python
Python按钮的响应事件详解
2019/03/04 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
小学生感恩演讲稿
2014/04/25 职场文书
演讲稿格式范文
2014/05/19 职场文书
干部竞争上岗演讲稿
2014/09/11 职场文书
员工评语范文
2014/12/31 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server