php 无限极分类 封装
<?php namespace App\Services; use Illuminate\Http\Request; /** * Class PendingService * @package App\Service * 无限分类公共类 */ class LimitlessService { protected $_request; // public function __construct(Request $request) // { // $this->_request = $request; // // } //递归 public function getTree($data, $pid) { $list = []; foreach($data as $key=>$val) { if($val['pid'] == $pid){ $val['children'] = $this->getTree($data, $val['id']); $list[] = $val; } } return $list; } //非递归 public function arr2tree($list, $id = 'id', $pid = 'pid', $son = 'children') { list($tree, $map) = [[], []]; foreach ($list as $item) { $map[$item[$id]] = $item; } foreach ($list as $item) { if (isset($item[$pid]) && isset($map[$item[$pid]])) { $map[$item[$pid]][$son][] = &$map[$item[$id]]; } else { $tree[] = &$map[$item[$id]]; } } unset($map); return $tree; } public function arr2table(array $list, $id = 'id', $pid = 'pid', $path = 'path', $ppath = '') { $tree = []; foreach ($this->arr2tree($list, $id, $pid) as $attr) { $attr[$path] = "{$ppath}-{$attr[$id]}"; $attr['children'] = isset($attr['children']) ? $attr['children'] : []; $attr['spt'] = substr_count($ppath, '-'); $attr['spl'] = str_repeat(" ├ ", $attr['spt']); $sub = $attr['children']; unset($attr['children']); $tree[] = $attr; if (!empty($sub)) { $tree = array_merge($tree, $this->arr2table($sub, $id, $pid, $path, $attr[$path])); } } return $tree; } }