在 PHP 7.2 中,将一个树形结构的多维数组转换为二维数组的实现
1、HTTP 请求,获取租户列表(基于当前租户 ID,自根租户自上而下),获取到一个树形结构的多维数组,无限级循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | /** * 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、获取租户列表(二维数组),将一个树形结构的多维数组转换为二维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | /** * 获取子级租户列表(二维数组) * * @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 ; } |
近期评论