首先数据库设计如下图
吧数据库的数据查出来,吧数据生成树结构
public function get_cat(){
//$where['pid'] = 0;
$where[] = '';
$categories = M('cat_level')->select();
$rs = $this->list_to_tree($categories);
echo '<pre>';
print_r($rs);
echo '</pre>';
}
public function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
// 创建Tree
$tree = array();
if(is_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $data) {
$refer[$data[$pk]] =& $list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[] =& $list[$key];
}else{
if (isset($refer[$parentId])) {
$parent =& $refer[$parentId];
$parent[$child][] =& $list[$key];
}
}
}
}
return $tree;
}
php无限极分类 生成在下拉框中显示出来的数据结构
public function get_cat(){
$categories = M('cat_level')->select();
$rs = $this->make_tree($categories);
dump($rs);
$this->display();
}
static public function make_tree($list,$html='--',$pid=0,$level=0){
$arr = array();
foreach($list as $v){
if($v['pid'] == $pid){
$v['level'] = $level+1;
$v['html'] = str_repeat($html,$level);
$arr[] = $v;
$arr = array_merge($arr,self::make_tree($list,$html,$v['id'],$level+1));
}
}
return $arr;
}
生成的形式在页面上的显示如图
//传递一个子分类,得到所有的父级分类
static public function get_parent_info($cate,$cid){
$arr = array();
foreach($cate as $v){
if($v['id'] == $cid){
$arr[]=$v;
$arr = array_merge($arr,self::get_parent_info($cate,$v['pid']));
}
}
return $arr;
}
//传递一个父级分类。得到所有的子级分类
static public function get_son_info($cate,$cid=0){
$arr = array();
foreach($cate as $v){
if($v['pid'] == $cid){
$arr[]= $v;
$arr = array_merge($arr,self::get_son_info($cate,$v['id']));
}
}
return $arr;
}
将一个树形的多位数组转化成一个正常的二位数组
function imp($tree, $children='children') { $imparr = array(); foreach($tree as $w) { if(isset($w[$children])) { $t = $w[$children]; unset($w[$children]); $imparr[] = $w; if(is_array($t)) $imparr = array_merge($imparr, $this->imp($t, $children)); } else { $imparr[] = $w; } } return $imparr; }