
正文
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=0;
}else{
$list=$this-where("id=$pid")-find();
$data=$list['path'].'-'.$list['id'];//子类的path为父类的path加上父类的id
}
return $data;
}
}
?
模板:index.html
form action="!-URL-!/add" method="post"
请选择父级栏目:select name="pid" size="20"
option value="0"根栏目/option
volist name="alist" id="vo"
option value="{$vo['id']}"
for start="0" end="$vo['count']"
/for
{$vo['name']}
/option
/volist
/selectbr /
新的栏目名称:input type="text" name="name" /br /
input type="submit" value="添加栏目" /
/form
相关问答
Q1: 如何使用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();
}
上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:
复制代码代码如下:
/**
* 如何取数据格式化的树形数据
*/
$tree = generateTree($items);
function getTreeData($tree){
foreach($tree as $t){
echo $t['name'].'br';
if(isset($t['son'])){
getTreeData($t['son']);
}
}
}
getTreeData($tree);
Q2: 什么是 无限极分类???(PHP。数据库)
那是一种关联关系....sql 里可以叫"自连接" 假设:表 Category 有以下字段: Id(PK),Cate_Name(varchar),Cate_Parent_Id(int) 数据: Id(编号ID) Cate_Name(类别名称) Cate_Parent_Id(父级Id) 1 BaseCategory 0 2 News 1 3 Article 1 4 Story 3 说明: Id 为 1 的基类别(没有父级类别) News,Article 为 基类别下的子分类 Story 为 Article 下的子分类 层次关系: 0 - 2 - 3 - 4 这样就可以简单实现无限分类的数据库的设计了 使用: 给出Id 获取到它的父类别和所有子类别 Function getParentCategory($Id){ $sql = "select * from Category where Id = (select Cate_Parent_Id from Category where Id = $Id)"; $rs = mysql_query($sql,$conn); ...... //省事期间,给出伪代码吧 if(记录不存在 或者 $Id = 1){ return false; //无父级或不存在 }else{ return 查询出的父级数据数组; } } Function getChildCategory($PId){ $sql = "select * from Category where Cate_Parent_Id = $PId"; 存在则返回数据数组 否则返回false } 上面只是简单说明下大致思路.. php,J2ee的我没手写过,都是通过支持ORM的MVC框架去配置出来的. asp的倒是写过,需要的话,可以发你 只要逻辑关系整清楚了,就不难了...至于页面展示,可以用JS或者AJAX
Q3: php 几种常用的递归 无限极分类
/**
* 递归实现无限极分类
* @param $array 分类数据
* @param $pid 父ID
* @param $level 分类级别
* @return $list 分好类php无限极分类数据表的数组 直接遍历即可 $level可以用来遍历缩进
*/
function getTree($array, $pid =0, $level = 0){
//声明静态数组,避免递归调用时,多次声明导致数组覆盖
static $list = []; foreach ($array as $key = $value){ //第一次遍历,找到父节点为根节点php无限极分类数据表的节点 也就是pid=0php无限极分类数据表的节点
if ($value['pid'] == $pid){ //父节点为根节点php无限极分类数据表的节点,级别为0php无限极分类数据表,也就是第一级
$value['level'] = $level; //把数组放到list中
$list[] = $value; //把这个节点从数组中移除,减少后续递归消耗
unset($array[$key]); //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
getTree($array, $value['id'], $level+1);
}
}
关于php无限极分类数据表和php实现无限极分类的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








