对于无限极分类,要查找一个分类的顶级分类听起来很复杂
其实只要弄清原理,也并不是那么令人望而生畏!
<?php
$sql = "select id, pid from tablename ";
// 查询后 将结果处理成 如下数组格式
$arr = [
// id => pid
1 => 0,
// 省略...
6 => 1,
// 省略...
12 =>6
];
// 建议将这数组缓存起来
$id = 12;
while($arr[$id]) {
$id = $arr[$id];
}
echo $id; // 1
注意:
1.其实无限极分类原理清晰后就会发现,其实id->pid关系紧密,pid顶级为0,故采用while循环是很好的解决办法!
2.当然对数组的格式处理也得明白了。
关于无限极菜单简单实现
1.先定义如下结构数组,当然数据库查询也可以处理成如下结构
$arr=array(
1=>array('id'=>'1','name'=>'北京','pid'=>'0'),
2=>array('id'=>'2','name'=>'上海','pid'=>'0'),
3=>array('id'=>'3','name'=>'浦东','pid'=>'2'),
4=>array('id'=>'4','name'=>'朝阳','pid'=>'1'),
5=>array('id'=>'5','name'=>'广州','pid'=>'0'),
6=>array('id'=>'6','name'=>'三里屯','pid'=>'4'),
7=>array('id'=>'7','name'=>'广东','pid'=>'5'),
8=>array('id'=>'8','name'=>'三里','pid'=>'4'),
10=>array('id'=>'10','name'=>'小胡同','pid'=>'8')
);
2.实现方法
public function getTrees($arr,$pid,$step = 0){
global $tree;
foreach($arr as $val) {
if($val['pid'] == $pid) {
$flag = str_repeat(' ',$step);
$val['cate_name'] = $flag.$val['cate_name'];
$tree[] = $val;
$this->getTrees($arr , $val['cate_id'] ,$step+1);
}
}
return $tree;
}
其中$flag参数可以根据自己喜好设计
3.调用方法
$newarr = $this->getTreegs($arr, 0, 0);
注意:这些都是在thinkphp框架下实现的,调用方法等语法一看便知,如果是自己写原生代码,不在框架内,则自行修改调用方式(去掉$this->function()格式)。