php商城分类算法,效率高的php无限分类算法

php 无限分类 核心算法

请看下面的 核心算法

/*

说明:

$arr (array)??型如:

array(

0=>array(

‘cate_id’=11,

‘per_id’=0,

‘cate_name’=’a’

),

1=>array(

‘cate_id’=12,

‘per_id’=0,

‘cate_name’=’b’

),

2=>array(

‘cate_id’=13,

‘per_id’=11,

‘cate_name’=’a10’

),

….);

$arr2 (array) 排序后的结果 ,型如:

array(

0=>array(

‘cate_id’=11,

‘per_id’=0,

‘lv’=0,

‘cate_name’=’a’

),

1=>array(

‘cate_id’=13,

‘per_id’=11,

‘lv’=1,

‘cate_name’=’a10’

),

2=>array(

‘cate_id’=12,

‘per_id’=0,

‘lv’=0,

‘cate_name’=’b’

),

….);

$per_id? ?父类id ,从0开始,

$lv? ? 层编号,??父类为 0, 子类以它的父类层编号加1,??

$i 循环计数器.

*/

function cate_arr($arr,&$arr2=array(),$per_id=0,$lv=0){

??static??$i=0;??//从0开始

??if ((bool)$arr) {

??foreach ($arr as $value) {

? ?if ($value[‘per_id’]==$per_id) {

? ? $value[‘lv’]=$lv;

? ? $arr2[$i]=$value;

? ? $i++;

? ? $lv++;

? ? cate_arr($arr,$arr2,$value[‘cate_id’],$lv–);

? ?}

??}

??

??}

}

数据库 分类cate 表中只需要3个基本字段, (‘cate_id’,’per_id’,’cate_name’),

使用方式:

从数据库表

f32f1dc26c539ff8bc0c996870fe168b.gifcate)中获取数组$arr??;

…..

$sql=’select * from cate ‘;

$arr=$db->getall($sql);

cate_arr($arr,$arr2)??//使用cate_arr函数对$arr进行父->子排序, 并把排序后的结果赋值到 $arr2 中.

如果结合 smarty , 可以简单通过下面的演示看到排序后的效果

……

$tpl->assign(‘catels’,$arr2);

$tpl->display(‘cate.htm’);

执行后,页面显示的结果结构如:

a

??a1

? ???a20 a21

b

? ?b10??b11

c

? ?…..

或者按照实际的使用要求,对??$arr2 进行二次处理.

转载请注明作者 和出处,谢谢.

以上adodb +smarty 的例子,

本核心算法,只查询一次数据库, 并且只要3个字段名, 即可实现 父->子 排序 和 层次,

比现有很多php web 软件项目中使用的无限分类的实现方法 执行要快些.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值