版权声明:欢迎转评,一起学习. 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);
结果
参考