PHP实现多级分类生成树的方法示例

作者:袖梨 2022-06-24

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

*/

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;

}

相关文章

精彩推荐