首页后端开发PHP示例php+mysql查询实现无限下级分类树输出

示例php+mysql查询实现无限下级分类树输出

时间2024-02-02 10:26:03发布访客分类PHP浏览733
导读:收集整理的这篇文章主要介绍了示例php+mysql查询实现无限下级分类树输出,觉得挺不错的,现在分享给大家,也给大家做个参考。本文实例讲述了php+MySQL查询实现无限下级分类树输出。分享给大家供大家参考,具体如下:这里介绍的php结合m...
收集整理的这篇文章主要介绍了示例php+mysql查询实现无限下级分类树输出,觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了php+MySQL查询实现无限下级分类树输出。分享给大家供大家参考,具体如下:

这里介绍的php结合mySQL查询无限下级树输出,其实就是无限分类。给各位整理了几个php无限分类的例子.

【相关学习推荐:PHP编程(视频),mysql视频教程】

树输出:

function get_array($user_id,$top=0){
    global $mysql,$_G;
  $sql = "select user_id as name From `{
sPReads_users}
`  where p1.spreads_userid='{
$user_id}
    '";
    $rows= $mysql->
    db_fetch_arrays($sql);
  if($top==1){
      $arr[0]['name']=$user_id;
      $arr[0]['children']=array();
  }
      $top=$top+1;
    foreach ($rows as $key=>
$value) {
         $r = get_array($value['name']);
     //调用函数,传入参数,继续查询下级     $arr[0]['children'][$key]['name']= $value['username'];
 //组合数组      if(is_array($r)){
          $arr[0]['children'][$key]['children']= $r[0]['children'];
      }
          $i++;
    }
        return $arr;
  }
    $list = get_array("1000",1);
     //调用函数1000是顶级IDecho 'VAR data='.json_encode($list);
    

这个是输出 Array 然后转让为 json

例子:

表结构:id字段为分类标识,name字段为分类名,father_id字段为所属父分类的id,path字段为分类路径,储存该分类祖先的集合,isdir判断是否是目录,1为是,0为否.

显示函数:

//$count为分类等级sort_list($str,$fatherid,$count){
    $rs = $this->
    sql->
    re_datas("select * from sort where father_id = fatherid");
    $num = $this->
    sql->
    sql_numrows();
    $i=0;
    $n = 1;
while(isset($rs[$i])){
    $name = "";
    for($n = 1 ;
     $n  $count ;
 $n ){
    $name.="│ ";
}
if($i 1==$num){
    $name.="└─".$rs[$i][name];
}
else{
    $name.="├─".$rs[$i][name];
}
if($rs[$i][isdir]){
    $str.="span style='color:#CCCCCC'>
    ".$name."/span>
    ";
}
else{
    $str.=$name";
}
    $temp = $count 1;
    $str = $this->
    sort_list($str,$rs[$i][id],$temp);
    $i ;
}
    return $str;
}
    

其中$this-> sql对象为sql操作类对象,re_datas()函数返回查到的数组,sql_numrows()函数返回查询到的数目.

调用方法:

$sort_list = sort_list($sort_list,0,1);
    

例子:

表:category

id int 主键,自增
name vArchar 分类名称
pid int 父类id,默认0

顶级分类的 pid 默认就是0了,当我们想取出某个分类的子分类树的时候,基本思路就是递归,当然,出于效率问题不建议每次递归都查询数据库,通常的做法是先讲所有分类取出来,保存到PHP数组里,再进行处理,最后还可以将结果缓存起来以提高下次请求的效率.
先来构建一个原始数组,这个直接从数据库中拉出来就行:

$categories = array(  array('id'=>
    1,'name'=>
    '电脑','pid'=>
    0),  array('id'=>
    2,'name'=>
    '手机','pid'=>
    0),  array('id'=>
    3,'name'=>
    '笔记本','pid'=>
    1),  array('id'=>
    4,'name'=>
    '台式机','pid'=>
    1),  array('id'=>
    5,'name'=>
    '智能机','pid'=>
    2),  array('id'=>
    6,'name'=>
    '功能机','pid'=>
    2),  array('id'=>
    7,'name'=>
    '超级本','pid'=>
    3),  array('id'=>
    8,'name'=>
    '游戏本','pid'=>
    3),);
    

目标是将它转化为下面这种结构:

电脑—笔记本——-超级本——-游戏本—台式机手机—智能机—功能机

用数组来表示的话,可以增加一个 children 键来存储它的子分类:

array(  //1对应id,方便直接读取  1 =>
     array(    'id'=>
    1,    'name'=>
    '电脑',    'pid'=>
    0,    children=>
    array(      &
    array(        'id'=>
    3,        'name'=>
    '笔记本',        'pid'=>
    1,        'children'=>
    array(          //此处省略        )      ),      &
    array(        'id'=>
    4,        'name'=>
    '台式机',        'pid'=>
    1,        'children'=>
    array(          //此处省略        )      ),    )  ),  //其他分类省略)

处理过程:

$tree = array();
//第一步,将分类id作为数组key,并创建children单元foreach($categories as $category){
      $tree[$category['id']] = $category;
      $tree[$category['id']]['children'] = array();
}
    //第二部,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。foreach ($tree as $k=>
$ITem) {
  if ($item['pid'] != 0) {
        $tree[$item['pid']]['children'][] = &
    $tree[$k];
  }
}
    

print_r($tree); 打印结果如下:

Array(  [1] =>
     Array    (      [id] =>
     1      [name] =>
     电脑      [pid] =>
     0      [children] =>
     Array        (          [0] =>
     Array            (              [id] =>
     3              [name] =>
     笔记本              [pid] =>
     1              [children] =>
     Array                (                  [0] =>
     Array                    (                      [id] =>
     7                      [name] =>
     超级本                      [pid] =>
     3                      [children] =>
     Array                        (                        )                    )                  [1] =>
     Array                    (                      [id] =>
     8                      [name] =>
     游戏本                      [pid] =>
     3                      [children] =>
     Array                        (                        )                    )                )            )          [1] =>
     Array            (              [id] =>
     4              [name] =>
     台式机              [pid] =>
     1              [children] =>
     Array                (                )            )        )    )  [2] =>
     Array    (      [id] =>
     2      [name] =>
     手机      [pid] =>
     0      [children] =>
     Array        (          [0] =>
     Array            (              [id] =>
     5              [name] =>
     智能机              [pid] =>
     2              [children] =>
     Array                (                )            )          [1] =>
     Array            (              [id] =>
     6              [name] =>
     功能机              [pid] =>
     2              [children] =>
     Array                (                )            )        )    )  [3] =>
     Array    (      [id] =>
     3      [name] =>
     笔记本      [pid] =>
     1      [children] =>
     Array        (          [0] =>
     Array            (              [id] =>
     7              [name] =>
     超级本              [pid] =>
     3              [children] =>
     Array                (                )            )          [1] =>
     Array            (              [id] =>
     8              [name] =>
     游戏本              [pid] =>
     3              [children] =>
     Array                (                )            )        )    )  [4] =>
     Array    (      [id] =>
     4      [name] =>
     台式机      [pid] =>
     1      [children] =>
     Array        (        )    )  [5] =>
     Array    (      [id] =>
     5      [name] =>
     智能机      [pid] =>
     2      [children] =>
     Array        (        )    )  [6] =>
     Array    (      [id] =>
     6      [name] =>
     功能机      [pid] =>
     2      [children] =>
     Array        (        )    )  [7] =>
     Array    (      [id] =>
     7      [name] =>
     超级本      [pid] =>
     3      [children] =>
     Array        (        )    )  [8] =>
     Array    (      [id] =>
     8      [name] =>
     游戏本      [pid] =>
     3      [children] =>
     Array        (        )    ))

优点:关系清楚,修改上下级关系简单.

缺点:使用PHP处理,如果分类数量庞大,效率也会降低.

相关推荐:编程视频课程

以上就是示例php+mysql查询实现无限下级分类树输出的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 示例php+mysql查询实现无限下级分类树输出
本文地址: https://pptw.com/jishu/596718.html
分享4个提高脚本性能的PHP技巧 阿里云PHP SMS短信服务验证码发送方法详解

游客 回复需填写必要信息