递归

/**     * 数组转树状构造     * @param  arr       $list      要转换的数据     * @param  int       $pid       父级ID     * @param  str       $pid_field 父级字段名     * @param  str       $id_field  主键名     */    function getTree($list, $pid=0, $pid_field='pid', $id_field='id'){        $result=[];        foreach ($list as $k => $v) {            if($list[$k][$pid_field] == $pid){                unset($list[$k]);                $children = getTree($list,$v[$id_field]);                if($children){                    $v['children'] = $children;                }                $result[]=$v;            }        }        return $result;    }

援用

/**     * 数组转树状构造     * @param  arr       $list      要转换的数据     * @param  str       $pid_field 父级字段名     * @param  str       $id_field  主键名     */    function getTree($list, $pid_field='pid', $id_field='id'){        $items=[];        foreach ($list as $k => $v) {            $items[$v[$id_field]]=$v;        }        $tree=[];        foreach ($items as $k => $v) {            if(isset($items[$v[$pid_field]])){                $items[$v[$pid_field]]['children'][]=&$items[$k];            }else{                $tree[]=&$items[$k];            }        }        return $tree;    }