php无限极分类数据表 php实现无限极分类

thinkphp前台怎么输出无限极分类最主要的是要掌握无限极分类的逻辑,那么写起来就很容易的多了
首先看数据库表:xp_cate
控制器: CateAction.class.php
?php
class CateAction extends Action{
function index(){
$cate=M('Cate');
$list=$cate-field("id,name,pid,path,concat(path,'-',id) as bpath")-order('bpath')-select();
foreach($list as $key=$value){
$list[$key]['count']=count(explode('-',$value['bpath']));
}
$this-assign('alist',$list);
$this-display();
}//添加栏目
function add(){
$cate=new CateModel();if($vo=$cate-create()){
if($cate-add()){
$this-success('添加栏目成功');
}else{
$this-error('添加栏目失败');
}
}else{
$this-error($cate-getError());
}
}}
?
模型:CateModel.class.php
?php
class CateModel extends Model{//对应数据库中的表xp_cate
protected $_auto=array(
array('path','tclm',3,'callback'),
);function tclm(){
$pid=isset($_POST['pid'])?(int)$_POST['pid']:0;
echo ($pid);
if($pid==0){
$data=https://www.04ip.com/post/0;
}else{
$list=$this-where("id=$pid")-find();
$data=https://www.04ip.com/post/$list['path'].'-'.$list['id'];//子类的path为父类的path加上父类的id
}
return $data;
}
}
?
模板:index.html
form action="!-URL-!/add" method="post"
请选择父级栏目:select name="pid" size="20"
option value="https://www.04ip.com/post/0"根栏目/option
volist name="alist" id="vo"
option value="https://www.04ip.com/post/{$vo['id']}"
for start="0" end="$vo['count']"
/for
{$vo['name']}
/option
/volist
/selectbr /
新的栏目名称:input type="text" name="name" /br /
input type="submit" value="https://www.04ip.com/post/添加栏目" /
/form
如何使用PHP实现无限级分类你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了 。
这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法 , 巧在引用,整理分享了 。
复制代码代码如下:
function generateTree($items){
$tree = array();
foreach($items as $item){
if(isset($items[$item['pid']])){
$items[$item['pid']]['son'][] = $items[$item['id']];
}else{
$tree[] = $items[$item['id']];
}
}
return $tree;
}
$items = array(
1 = array('id' = 1, 'pid' = 0, 'name' = '安徽省'),
2 = array('id' = 2, 'pid' = 0, 'name' = '浙江省'),
3 = array('id' = 3, 'pid' = 1, 'name' = '合肥市'),
4 = array('id' = 4, 'pid' = 3, 'name' = '长丰县'),
5 = array('id' = 5, 'pid' = 1, 'name' = '安庆市'),
);
print_r(generateTree($items));
可以看到下面打印的结果:
复制代码代码如下:
Array
(
[0] = Array
(
[id] = 1
[pid] = 0
[name] = 安徽省
[son] = Array
(
[0] = Array
(
[id] = 3
[pid] = 1
[name] = 合肥市
[son] = Array
(
[0] = Array
(
[id] = 4
[pid] = 3
[name] = 长丰县
)
)
)
[1] = Array
(
[id] = 5
[pid] = 1
[name] = 安庆市
)
)
)
[1] = Array
(
[id] = 2
[pid] = 0
[name] = 浙江省
)
)
上面生成树方法还可以精简到5行:
复制代码代码如下:
function generateTree($items){
foreach($items as $item)
$items[$item['pid']]['son'][$item['id']] = $items[$item['id']];
return isset($items[0]['son']) ? $items[0]['son'] : array();
}
上面这种无限极分类数据树形结构化的方法值得借鉴 。但是我觉得这段代码实际用途并不明显啊 , 你想取出格式化的树形数据还是要递归?。?

推荐阅读