php 实现无线分类

版权声明:欢迎转评,一起学习. https://blog.csdn.net/xiaobinqt/article/details/85053259

表结构如下:

类方法

<?php
/**
 * Created by PhpStorm.
 * User: nwei
 * Date: 2018/12/14
 * Time: 15:05
 *
 *    .--,       .--,
 *   ( (  \.---./  ) )
 *    '.__/o   o\__.'
 *       {=  ^  =}
 *        >  -  <
 *       /       \
 *      //       \\
 *     //|   .   |\\
 *     "'\       /'"_.-~^`'-.
 *        \  _  /--'         `
 *      ___)( )(___
 *     (((__) (__)))     高山仰止,景行行止.虽不能至,心向往之.
 */

namespace App\Tools;


class ClassTree
{
    /**
     * 分类排序(降序)
     */
    static public function sort($arr, $cols)
    {
        //子分类排序
        foreach ($arr as $k => &$v) {
            if (!empty($v['sub'])) {
                $v['sub'] = self::sort($v['sub'], $cols);
            }
            $sort[$k] = $v[$cols];
        }
        if (isset($sort))
            array_multisort($sort, SORT_DESC, $arr);
        return $arr;
    }

    /**
     * 横向分类树
     */
    static public function hTree($arr, $pid = 0)
    {
        foreach ($arr as $k => $v) {
            if ($v['parentid'] == $pid) {
                $data[$v['id']] = $v;
                $data[$v['id']]['sub'] = self::hTree($arr, $v['id']);
            }
        }
        return isset($data) ? $data : array();
    }

    /**
     * 纵向分类树
     */
    static public function vTree($arr, $pid = 0,$level=0)
    {
        foreach ($arr as $k => $v) {
            if ($v['parentid'] == $pid) {
                $v['level'] = $level;
                $data[$v['id']] = $v;
                $data += self::vTree($arr, $v['id'],$level+1);
            }
        }
        return isset($data) ? $data : array();
    }
}

 使用示例:

数据

非平级无线分类

$result = Department::orderBy('id', 'asc')->get();
        $result = $result->toArray();
        $tree = new \App\Tools\ClassTree();
        $s = $tree::hTree($result);

        dd($s);

结果

平级无线分类

调用示例

$result = Department::orderBy('id', 'asc')->get();
        $result = $result->toArray();
        $tree = new \App\Tools\ClassTree();
        $s = $tree::vTree($result);

        dd($s);

 结果

参考

http://www.thinkphp.cn/code/3462.html

猜你喜欢

转载自blog.csdn.net/xiaobinqt/article/details/85053259
今日推荐