php无限极,PHP实现无限极分类

PHP实现无限极分类

发布时间:2017年03月14日 评论数:抢沙发

阅读数:634

利用两个for循环实现无限级分类

表:

字段名

字段类型

备注

默认值

id

int

主键 auto-increment

name

varchar

分类名称

pid

int

父类id

0

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

先来构建一个原始数组,这个直接从数据库中查询出来就行:1. 构建数据

$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),

);

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

电脑 >笔记本 >>超级本 >> 游戏本 > 台式机

手机 > 智能机 > 功能机

array(

//1对应$categories中的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(

//此处省略

)

),

)

),

//其他分类省略

)

2. 处理过程:

$tree = array();

//第一步,将所有的分类id作为数组key,并创建children单元

foreach($categories as $category){

$tree[$category['id']] = $category;

$tree[$category['id']]['children'] = array();

}

//第二步,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。

foreach ($tree as $key=>$value) {

if ($value['pid'] != 0) {

$tree[$value['pid']]['children'][] = &$tree[$key];

}

}

print_r($tree);

注:必须通过引用, 否则不会一次遍历就生成最终的结果.

3. 打印结果如下:

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处理,如果分类数量庞大,效率也会降低。

66.html

本文作者:Az

文章标题: PHP实现无限极分类

本文地址:http://www.lzpphp.com/PHP/66.html

版权声明:若无注明,本文皆为“Az个人博客”原创,转载请保留文章出处。

30eb08a380cb470041fae9421ab69209.gif

a9ab93c370dd624dc6d9081ba42ddcbe.gif

32f5a02f6732a9b27f8a2781603201a0.gif

758a559b4a5417e1b83abf39882e08da.gif

655d36a2669ee057515d3963505aaf9c.gif

c5c857d76bb31e206c65b6eedeef53e5.gif

9f4d9ac0541be0979e862c1d5adf086f.gif

2cc0e6aa6911ce26850b4f87db57d24e.gif

48fd57a5117e54e46c68b5747212b67a.gif

560161c480bf3fc8cbe1b8e092ae7b03.gif

95f47d88ba3535f5522edd1fd203e1d4.gif

b12a5b38eeff21df26f1a73c443226fd.gif

e9b9a47fb9620dbe127d0a6e7b9b9856.gif

59dd9d12f0a962f7dd2da33b4a03442f.gif

c858bbb5fb20e8f65beab2dd5d3854c1.gif

11a23492fa4a432ec643e37cb9197dee.gif

68d414c4d22da05db10dd72a1c2f21c3.gif

fd3fb25c2f619d8de180be5696263553.gif

43afeddba47b8bcf9082833e96d6257a.gif

d93331c42485a20ad9cc0b242b270ba8.gif

cdfcfd0a2532183029da3f4d4c9d3906.gif

c977c2f84c22d72b5a673576b690989c.gif

7deda590881a92f7f27c443e3c4108a4.gif

4222af1e313ad6bd281ebbfe03e74c4e.gif

4f6448409a7e6c4d2f56ee4d9cad0945.gif

2de0059bd75aed0451a6918b8fe72e7b.gif

5a9b312038f891379a2cc8befc2c57f0.gif

ae4ed3aaed2565d012b386731e7e77e9.gif

6e03ae8926d689bd0349c896829b41e2.gif

1dac8e6093e8f129c00f119d2d21794a.gif

提交评论

名  字:

邮  箱:

网  址:

清空信息

关闭评论

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值