| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | <?phpnamespace app\common\util;class Tree{    /**     * 示例数组     * @var array|array[]     */    public array $array = [        ['id' => 1, 'name' => 'ha1', 'parent_id' => 0],        ['id' => 2, 'name' => 'ha2', 'parent_id' => 0],        ['id' => 3, 'name' => 'ha3', 'parent_id' => 0],        ['id' => 4, 'name' => 'ha4', 'parent_id' => 1],        ['id' => 5, 'name' => 'ha5', 'parent_id' => 1],        ['id' => 6, 'name' => 'ha6', 'parent_id' => 2],    ];    /**     * 1级转1维数组无限极分类     * @param array $array     * @param int $parent_id     * @return array     */    public function getTree(array $array, int $parent_id = 0): array    {        static $data = [];        foreach ($array as $key => $value) {            if ($value['parent_id'] == $parent_id) {                $data[] = $value;                unset($array[$key]);                $this->getTree($array, $value['id']);            }        }        return $data;    }    /**     * 1级转2维数组数无限极分类     * @param array $array     * @return array     */    public function getTreeV2(array $array): array    {        $refer = [];        $tree = [];        foreach ($array as $key => $val) {            $refer[$val['id']] = &$array[$key];            $refer[$val['id']]['label'] = $val['name'];        }        foreach ($array as $k => $v) {            $pid = $v['parent_id']; //获取当前分类的父级id            if ($pid == 0) {                $tree[] = &$array[$k]; //顶级栏目            } else {                if (isset($refer[$pid])) {                    $refer[$pid]['children'][] = &$array[$k]; //如果存在父级栏目,则添加进父级栏目的子栏目数组中                }            }        }        return $tree;    }}
 |