php 商品数组分类

假设现在有以下商品数组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);

最终的效果是:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012600104/article/details/80543883