假设现在有以下商品数组parentid=0为顶级分类其他的都是顶级或是二,三级的子类。
/**
*商品类数组
*/
function getData(){
$data=array(
0 =>
array ( 'cateid' => '1' ,'title' => 'asd' ,'parentid' => '0' ,'createtime' => '1527845919' ),
1 =>
array ('cateid' => '2', 'title' => 'ggg' , 'parentid' => '0','createtime' => '1527845936'),
2 =>
array ( 'cateid' => '3' ,'title' => 'hhh' ,'parentid' => '1' ,'createtime' => '1527845951' ),
3 =>
array ( 'cateid' => '4' ,'title' => 'vvv' , 'parentid' => '2' ,'createtime' => '1527845968' ),
4 =>
array ( 'cateid' => '5' ,'title' => 'xxxx' ,'parentid' => '2' ,'createtime' => '1527846023' ),
5 =>
array ('cateid' => '6' ,'title' => 'jjjjj' ,'parentid' => '1' ,'createtime' => '1527846031' ),
6 =>
array ('cateid' => '7' ,'title' => 'iii' ,'parentid' => '1' ,'createtime' => '1527850236' ),
7 =>
array ('cateid' => '8' ,'title' => 'iii^^^' ,'parentid' => '2' ,'createtime' => '1527850251' ),
8 =>
array ('cateid' => '9' ,'title' => 'zzzz' ,'parentid' => '0' ,'createtime' => '1527859601' ),
9 =>
array ( 'cateid' => '10' ,'title' => '3333' ,'parentid' => '9' ,'createtime' => '1527859627' ),
10 =>
array ('cateid' => '11' ,'title' => 'aaaa' , 'parentid' => '0' ,'createtime' => '1527859687' ),
11 =>
array ( 'cateid' => '12' ,'title' => 'ssss' ,'parentid' => '11' ,'createtime' => '1527859712' ,),
12 =>
array ( 'cateid' => '13' ,'title' => 'wearet' ,'parentid' => '11' ,'createtime' => '1527859768' ,),
13 =>
array ('cateid' => '14' ,'title' => 'ooooo' ,'parentid' => '13' ,'createtime' => '1527860067' ,),
);
return $data;
}
/**
*商品分类
*
*/
function getTree($cates, $pid = 0){
$tree = [];
foreach($cates as $cate){
if($cate['parentid'] == $pid){
//父类数组赋给$tree数组
$tree[] = $cate;
//找出子类 合并到复类
$tree = array_merge($tree,getTree($cates, $cate['cateid']));
}
}
return $tree;
}
/**
*对分类级别加前缀 |-----
*/
function setPrefix($data, $p = "|-----")
{
$tree = [];
//类的层级数
$num = 1;
//前缀个数
$prefix = [0 => 1];
//current 输出数组中的当前元素的值
while($val = current($data)){
//key 从当前内部指针位置返回元素键名
$key = key($data);
//当走第二次循环时
if ($key > 0) {
//如果上一次循环的parentid 不等于当前的 parentid,表示层级已经改变$num++
if ($data[$key - 1]['parentid'] != $val['parentid']){
//层级数++
$num ++;
}
}
//检查当前的父级ID是否存在$prefix数组里
if (array_key_exists($val['parentid'], $prefix)){
//把父类ID赋给层级数(父类id多少表示多少级)
$num = $prefix[$val['parentid']];
}
//str_repeat 把字符串$p重复$num 次然后加上类名
$val['title'] = str_repeat($p, $num).$val['title'];
//
$prefix[$val['parentid']] = $num;
$tree[] = $val;
//next 输出数组中的当前元素和下一个元素的值:
next($data);
}
return $tree;
}
/**
*列表列表
*/
function getTreeList(){
$data =getData();
//分类查找出来的数据
$tree =getTree($data);
//给每个分类加 |--- 前缀然后返回数据
return $tree =setPrefix($tree);
}
//
$list=getTreeList();
//打印出效果
var_dump($list);
最终的效果是: