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关于array_multisort多维数组排序的使用说明
Jan 04 PHP
php启动时候提示PHP startup的解决方法
May 07 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
Dec 22 PHP
深入浅析用PHP实现MVC
Mar 02 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 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
如何将数据从文本导入到mysql
2006/10/09 PHP
php include,include_once,require,require_once
2008/09/05 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
python如何通过protobuf实现rpc
2016/03/06 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
简述Python2与Python3的不同点
2018/01/21 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
python递归实现快速排序
2018/08/18 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
毕业生的自我鉴定
2013/10/29 职场文书
公司开除员工通知
2015/04/22 职场文书
开学第一天的感想
2015/08/10 职场文书
高中数学教学反思范文
2016/02/18 职场文书
高一作文之暖冬
2019/11/09 职场文书
解决redis批量删除key值的问题
2022/03/23 Redis