php mysql 的多级分类树结构_PHP实现多级分类生成树的方法

这篇文章主要介绍了PHP实现多级分类生成树的方法,涉及php+mysql数据库操作及数组与字符串遍历、替换、组合等相关操作技巧,需要的朋友可以参考下

具体如下:

条件,数据库里分类是按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;

}

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值