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 相关文章推荐
做一个有下拉功能的留言版
Oct 09 PHP
javascript,php获取函数参数对象的代码
Feb 03 PHP
ThinkPHP中自定义错误页面和提示页面实例
Nov 22 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
php操作memcache缓存方法分享
Jun 03 PHP
php实现微信公众号无限群发
Oct 11 PHP
PHP匿名函数和use子句用法实例
Mar 16 PHP
PHP数组编码gbk与utf8互相转换的两种方法
Sep 01 PHP
PHP的自定义模板引擎
Mar 24 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 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
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
PHP实现获取FLV文件的时间
2015/02/10 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
domReady的实现案例
2016/11/23 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
在Django中创建动态视图的教程
2015/07/15 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
Python定时器实例代码
2017/11/01 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
python读取Excel实例详解
2018/08/17 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
python实现的汉诺塔算法示例
2019/10/23 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
银行纠风工作实施方案
2014/06/08 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers