listDistrict(); // 更改为树状数组 $district_list = listToTree($district_list); return $district_list; } /** * 更新全部省市区三级行政区划 * @date 2021-02-04 */ function createDistrict() { exit; //一般不会更新,需要更新时注释掉该行代码 需要把三个表备份一下,截断后重新写入新数据 $map_param = get_tencent_map_config(2); $district_model = new \app\base\model\district\District(); $tencent_map_class = new \tencent\map\District($map_param); $res = $tencent_map_class->getDistrict(); $data = $res['result']; //全部省市区三级行政区划 //更新三级行政区划 $city_id = 100;//二级行政区域ID由101起始 $area_id = 1000;//三级行政区域ID由1001起始 foreach ($data[0] as $k1 => $v1) { $province[] = [ //省级数据 'id' => $k1 + 1, 'level' => 1, 'pid' => '', 'adcode' => $v1['id'], 'brief_name' => $v1['name'], 'name' => $v1['fullname'], 'lat' => $v1['location']['lat'], 'lng' => $v1['location']['lng'], 'pinyin' => implode(' ', $v1['pinyin']), 'create_time' => time(), 'update_time' => time() ]; $city_data = array_slice($data[1], $v1['cidx'][0], $v1['cidx'][1] - $v1['cidx'][0] + 1); //截取对应的二级行政区域数据 //判断该省是否为直辖市、香港、澳门 $is_directly_city = true; //一级是否是直辖市、香港、澳门,即省市区只有二级行政区域没有三级行政区域数据(二级延用一级,三级延用二级) $has_directly_area = false; //一级是否含有直辖县第3、4位为90的,为省直辖县(二级多一个"省直辖县级行政区划",该地区所有直辖县移至该二级三级) foreach ($city_data as $k => $v) { if (!empty($v['cidx'])) { $is_directly_city = false; } if (substr($v['id'], 2, 2) == '90') { $has_directly_area = true; } } if ($is_directly_city) { //针对于直辖市、香港、澳门 $city[] = [ 'id' => ++$city_id, 'level' => 2, 'pid' => $k1 + 1, 'adcode' => $v1['id'], 'brief_name' => $v1['name'], 'name' => $v1['fullname'], 'lat' => $v1['location']['lat'], 'lng' => $v1['location']['lng'], 'pinyin' => implode(' ', $v1['pinyin']), 'create_time' => time(), 'update_time' => time(), ]; foreach ($city_data as $k2 => $v2) { $area[] = [ 'id' => ++$area_id, 'level' => 3, 'pid' => $city_id, 'adcode' => $v2['id'], 'brief_name' => $v2['name'], 'name' => $v2['fullname'], 'lat' => $v2['location']['lat'], 'lng' => $v2['location']['lng'], 'pinyin' => implode(' ', $v2['pinyin']), 'create_time' => time(), 'update_time' => time(), ]; } } else { $directly_area_id = 0; foreach ($city_data as $k2 => $v2) { if (substr($v2['id'], 2, 2) == '90') { if (!$directly_area_id) { $city[] = [ 'id' => ++$city_id, 'level' => 2, 'pid' => $k1 + 1, 'adcode' => '', 'brief_name' => '省直辖县', 'name' => '省直辖县级行政区划', 'lat' => '', 'lng' => '', 'pinyin' => 'sheng zhi xia xian', 'create_time' => time(), 'update_time' => time(), ]; $directly_area_id = $city_id; } $area[] = [ 'id' => ++$area_id, 'level' => 3, 'pid' => $directly_area_id, 'adcode' => $v2['id'], 'brief_name' => $v2['name'], 'name' => $v2['fullname'], 'lat' => $v2['location']['lat'], 'lng' => $v2['location']['lng'], 'pinyin' => implode(' ', $v2['pinyin']), 'create_time' => time(), 'update_time' => time(), ]; } else { $city[] = [ 'id' => ++$city_id, 'level' => 2, 'pid' => $k1 + 1, 'adcode' => $v2['id'], 'brief_name' => $v2['name'], 'name' => $v2['fullname'], 'lat' => $v2['location']['lat'], 'lng' => $v2['location']['lng'], 'pinyin' => implode(' ', $v2['pinyin']), 'create_time' => time(), 'update_time' => time(), ]; $area_data = array_slice($data[2], $v2['cidx'][0], $v2['cidx'][1] - $v2['cidx'][0] + 1); //截取对应的三级行政区域数据 foreach ($area_data as $k3 => $v3) { $area[] = [ 'id' => ++$area_id, 'level' => 3, 'pid' => $city_id, 'adcode' => $v3['id'], 'brief_name' => '', 'name' => $v3['fullname'], 'lat' => $v3['location']['lat'], 'lng' => $v3['location']['lng'], 'pinyin' => '', 'create_time' => time(), 'update_time' => time(), ]; } } } } } //合并省市区数据 $district_data = array_merge($province, $city, $area); $district_model->insertAll($district_data); echo 'success'; } }