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 相关文章推荐
php 数学运算验证码实现代码
Oct 11 PHP
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
php中长文章分页显示实现代码
Sep 29 PHP
Laravel框架表单验证详解
Sep 04 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
四个常见html网页乱码问题及解决办法
Sep 08 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
php技巧小结【推荐】
Jan 19 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
PHP实现批量修改文件名的方法示例
Sep 18 PHP
php面向对象重点知识分享
Sep 27 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
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
Vue.js划分组件的方法
2017/10/29 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
Vuex提升学习篇
2018/01/11 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
2019/06/27 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
django从后台返回html代码的实例
2020/03/11 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
文案策划求职信
2014/03/18 职场文书
公路绿化方案
2014/05/12 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
MySQL连接控制插件介绍
2021/09/25 MySQL
xhunter1.sys可以删除嘛? win11提示xhunter1.sys驱动不兼容解决办法
2022/09/23 数码科技