在 PHP 7.2 中,将一个树形结构的多维数组转换为二维数组的实现
1、HTTP 请求,获取租户列表(基于当前租户 ID,自根租户自上而下),获取到一个树形结构的多维数组,无限级循环
/** * HTTP 请求,获取租户列表(基于当前租户 ID,自根租户自上而下) * * @param string $groupId 租户ID * * @return array * 格式如下: * [ * 'group_id' => 'c10e87f39873512a16727e17f57456a5', // 租户ID * 'group_pid' => '', // 租户父级 ID * 'group_code' => '1800000001', // 租户标识 * 'group_name' => '广东省', // 租户名称 * 'is_open' => 1, // 租户状态,0:关闭;1:开启 * 'group_logo' => '/uploads/cmc_group_logo/20190214/1550128076-ccLZyN.png', // 租户 LOGO 地址 * 'open_type' => 'self-reg', // 开通方式,self-reg:自助开通;admin-open:后台开通 * 'source' => 'cmc', // 开通途径 * 'add_time' => '1970-01-01 08:00:01', // 添加时间 * 'update_time' => '2019-03-11 14:43:33', // 更新时间 * 'child' => [ * [ * 'group_id' => '015ce30b116ce86058fa6ab4fea4ac63', * 'group_pid' => 'c10e87f39873512a16727e17f57456a5', * 'group_code' => '1800000005', * 'group_name' => '深圳市', * 'is_open' => 1, * 'group_logo' => '/uploads/cmc_group_logo/20190222/1550817342-Rr99M2.jpg', * 'open_type' => 'admin-open', * 'source' => '', * 'add_time' => '2018-04-26 10:05:43', * 'update_time' => '2019-03-11 14:43:38', * 'child' => [ * [ * 'group_id' => '7a4db30bbab43d2c410ea32e877492a1', * 'group_pid' => '015ce30b116ce86058fa6ab4fea4ac63', * 'group_code' => '88888888', * 'group_name' => '罗湖区', * 'is_open' => 1, * 'group_logo' => '', * 'open_type' => 'admin-open' * 'source' => '', * 'add_time' => '2018-06-22 17:40:05', * 'update_time' => '2019-03-11 14:41:29', * 'child' => [ * ], * ], * [ * 'group_id' => 'chinamcloud', * 'group_pid' => '015ce30b116ce86058fa6ab4fea4ac63', * 'group_code' => '1800000056', * 'group_name' => '南山区', * 'is_open' => 1, * 'group_logo' => '', * 'open_type' => 'admin-open', * 'source' => '', * 'add_time' => '2018-07-25 16:17:26', * 'update_time' => '2019-03-11 14:30:50', * 'child' => [ * ], * ], * ], * ], * ], * ] * * * @throws ServerErrorHttpException */ public static function httpGetAllGroupTree($groupId) { /* HTTP 请求,获取租户列表(基于当前租户 ID,自根租户自上而下) */ $httpCmcConsoleGroup = new HttpCmcConsoleGroup(); $httpCmcConsoleGroupGetAllGroupTree = $httpCmcConsoleGroup->getAllGroupTree($groupId); if ($httpCmcConsoleGroupGetAllGroupTree === false) { if ($httpCmcConsoleGroup->hasErrors()) { $firstError = ''; foreach ($httpCmcConsoleGroup->getFirstErrors() as $message) { $firstError = $message; break; } throw new ServerErrorHttpException(Yii::t('error', Yii::t('error', Yii::t('error', '201002'), ['first_error' => $firstError])), 201002); } elseif (!$httpCmcConsoleGroup->hasErrors()) { throw new ServerErrorHttpException('Framework service console HTTP request failed for unknown reasons.'); } } return $httpCmcConsoleGroupGetAllGroupTree['data']; }
2、获取租户列表(二维数组),将一个树形结构的多维数组转换为二维数组
/** * 获取子级租户列表(二维数组) * * @param array $groupTree 租户列表(树形) * * @return array * 格式如下: * [ * '015ce30b116ce86058fa6ab4fea4ac63' => [ * 'group_id' => '015ce30b116ce86058fa6ab4fea4ac63', // 租户ID * 'group_pid' => 'c10e87f39873512a16727e17f57456a5', // 租户父级 ID * 'group_code' => '1800000005', // 租户标识 * 'group_name' => '深圳市', // 租户名称 * 'is_open' => 1, // 租户状态,0:关闭;1:开启 * 'group_logo' => '/uploads/cmc_group_logo/20190222/1550817342-Rr99M2.jpg', // 租户 LOGO 地址 * 'open_type' => 'admin-open', // 开通方式,self-reg:自助开通;admin-open:后台开通 * 'source' => '', // 开通途径 * 'add_time' => '2018-04-26 10:05:43', // 添加时间 * 'update_time' => '2019-03-11 14:43:38', // 更新时间 * ], * '7a4db30bbab43d2c410ea32e877492a1' => [ * 'group_id' => '7a4db30bbab43d2c410ea32e877492a1', * 'group_pid' => '015ce30b116ce86058fa6ab4fea4ac63', * 'group_code' => '88888888', * 'group_name' => '罗湖区', * 'is_open' => 1, * 'group_logo' => '', * 'open_type' => 'admin-open', * 'source' => '', * 'add_time' => '2018-06-22 17:40:05', * 'update_time' => '2019-03-11 14:41:29', * ], * ... * ] * * @throws ServerErrorHttpException */ public static function getChildGroupTwo($groupTree) { if (isset($groupTree['child'])) { if (!empty($groupTree['child'])) { foreach ($groupTree['child'] as $childGroup) { $groupTree[$childGroup['group_id']] = $childGroup; unset($groupTree[$childGroup['group_id']]['child']); $groupTree['child'] = $childGroup['child']; $groupTree = static::getChildGroupTwo($groupTree); } } else { unset($groupTree['child']); $groupTree = static::getChildGroupTwo($groupTree); } } return $groupTree; } /** * 获取租户列表(二维数组) * * @param object $identity 当前用户的身份实例 * * @return array * 格式如下: * [ * 'c10e87f39873512a16727e17f57456a5' => [ * 'group_id' => 'c10e87f39873512a16727e17f57456a5', // 租户ID * 'group_pid' => '', // 租户父级 ID * 'group_code' => '1800000001', // 租户标识 * 'group_name' => '广东省', // 租户名称 * 'is_open' => 1, // 租户状态,0:关闭;1:开启 * 'group_logo' => '/uploads/cmc_group_logo/20190214/1550128076-ccLZyN.png', // 租户 LOGO 地址 * 'open_type' => 'self-reg', // 开通方式,self-reg:自助开通;admin-open:后台开通 * 'source' => '', // 开通途径 * 'add_time' => '1970-01-01 08:00:01', // 添加时间 * 'update_time' => '2019-03-11 14:43:33', // 更新时间 * ], * '015ce30b116ce86058fa6ab4fea4ac63' => [ * 'group_id' => '015ce30b116ce86058fa6ab4fea4ac63', // 租户ID * 'group_pid' => 'c10e87f39873512a16727e17f57456a5', // 租户父级 ID * 'group_code' => '1800000005', // 租户标识 * 'group_name' => '深圳市', // 租户名称 * 'is_open' => 1, // 租户状态,0:关闭;1:开启 * 'group_logo' => '/uploads/cmc_group_logo/20190222/1550817342-Rr99M2.jpg', // 租户 LOGO 地址 * 'open_type' => 'admin-open', // 开通方式,self-reg:自助开通;admin-open:后台开通 * 'source' => '', // 开通途径 * 'add_time' => '2018-04-26 10:05:43', // 添加时间 * 'update_time' => '2019-03-11 14:43:38', // 更新时间 * ], * '7a4db30bbab43d2c410ea32e877492a1' => [ * 'group_id' => '7a4db30bbab43d2c410ea32e877492a1', * 'group_pid' => '015ce30b116ce86058fa6ab4fea4ac63', * 'group_code' => '88888888', * 'group_name' => '罗湖区', * 'is_open' => 1, * 'group_logo' => '', * 'open_type' => 'admin-open', * 'source' => '', * 'add_time' => '2018-06-22 17:40:05', * 'update_time' => '2019-03-11 14:41:29', * ], * ... * ] * * * @throws ServerErrorHttpException */ public static function getAllGroupTwo($identity) { // HTTP 请求,获取租户列表(基于当前租户 ID,自根租户自上而下) $httpGetAllGroupTree = CmcConsoleGroupService::httpGetAllGroupTree($identity->group_id); $rootGroupTwo[$httpGetAllGroupTree['group_id']] = $httpGetAllGroupTree; $allGroupTwo = $rootGroupTwo; if (isset($httpGetAllGroupTree['child'])) { unset($rootGroupTwo[$httpGetAllGroupTree['group_id']]['child']); $allGroupTree['child'] = $httpGetAllGroupTree['child']; $childGroupTwo = static::getChildGroupTwo($allGroupTree); $allGroupTwo = array_merge($rootGroupTwo, $childGroupTwo); } return $allGroupTwo; }
近期评论