数据库设计如下:pid代表父id,默认为0(顶级分类)
引用的方法如下:(递归的方法会降低性能)
function generateTree($data){
$items=array();
foreach($data as $v){//将数组存入$items,且$items的键为$data中的id
$items[$v['id']] = $v;
}
$tree=array();
foreach($items as $item){
if(isset($items[$item['pid']])){//通过pid判断$items中是否有对应的数组,$itms[0]不存在
$items[$item['pid']]['sub'][]=&$items[$item['id']];
}
else{
$tree[]=&$items[$item['id']];
}
}
return $tree;
}
再转为json格式。
前端js递归遍历出所有的结果:
var str = "";
var forData = function(childData,str){
str += "├   ";
for(var i=0;i<childData.length;i++){
this.template=_.template($("#class-tpl").html());
this.tblTemp=_.template($("#list-tpl").html());
var obj = childData[i];
if(obj.sub){//若存在子类,则递归遍历
obj.name=str+obj.name;
$("#tbd_class_basic").append(this.tblTemp(obj));
forData(obj.sub,str);
}else{
obj.name=str+obj.name;
$("#tbd_class_basic").append(this.tblTemp(obj));
}
}
}
forData(response,str);