今天遇到了一个平时很少遇到的问题。
这是一个将数组转换为树状结构的函数, 主要为了使用部门的无极限分类这样的问题,
递归的方式当然可以解决,但是复杂度太高,不适合,在网上找了一个方法。 因为返回的是json, 结果前端得到就是个对象, 所以要调整为数组。
public function listToTree($list, $root = 0, $pk = 'id', $pid = 'pid', $child = 'children')
{
$tree = array();
if (is_array($list)) {
$refer = array();
foreach ($list as $key => $data) {
$refer[$data[$pk]] = &$list[$key];
}
foreach ($list as $key => $data) {
// 判断是否存在parent
$parentId = $data[$pid];
if ($root == $parentId) {
$tree[$data[$pk]] = &$list[$key];
} else {
if (isset($refer[$parentId])) {
$parent = &$refer[$parentId];
$parent[$child][$data[$pk]] = &$list[$key];
}