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; } }