1. 程式人生 > >php 實現無線分類

php 實現無線分類

表結構如下:

類方法

<?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