php 列表生成树,PHP实现多级分类生成树的方法示例

/**

* 选择SQL涵数

*

* @access public

* @param Array  $field  字段信息,支持涵数

* @param Array  $table  数据库表

* @param Array  $where  条件

* @return SQL SQL语句

*/

functiontreeGet($data)

{

$tmptree=null;

$tree=$data;

returntreeAddNodeToTree($tmptree,treegetbyuid($tree,0,@$field),$tree);

}

/**

*插入SQL涵数

*

* @access public

* @param Array  $fieldResult  字段信息,支持涵数

* @param Array  $table  数据库表

* @return SQL SQL语句

*/

functiontreeAddNodeToTree($Node,$miniTree,&$source)

{

if(is_array($miniTree)) {

foreach($miniTreeas$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;

}

}

functiontreegetbyuid(&$stree,$uid)

{

$dtree=array();

if(is_array($stree)){

foreach($streeas$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语句

*/

functiontreeMakeDeep($deep)

{

$returnValue="";

for(;$deep;$deep--)

{

$returnValue.="┃";

}

return$returnValue."┣";

}

functiontreeList($treeData,&$List)

{

static$deep=0;

if(is_array($treeData))

{

foreach($treeDataas$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);

}

}

}

functiontreeSelect($tree,$id,$options="child")

{

switch(strtolower($options))

{

case"child":

$tmpTree=array();

$deep=-1;

foreach($treeas$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($treeas$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、付费专栏及课程。

余额充值