php 實現無線分類
阿新 • • 發佈:2018-12-24
表結構如下:
類方法
<?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);
結果
參考