Completed
Push — master ( a3c7a7...bd72ff )
by Carlos
02:47
created

Regional::get()   C

Complexity

Conditions 13
Paths 6

Size

Total Lines 44
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 44
rs 5.1234
cc 13
eloc 19
nc 6
nop 3

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * Regional.php
4
 *
5
 * Part of Overtrue\Wechat.
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 *
10
 * @author    a939638621 <[email protected]>
11
 * @copyright 2015 a939638621 <[email protected]>
12
 * @link      https://github.com/a939638621
13
 */
14
15
namespace Overtrue\Wechat\Shop\Data;
16
17
18
/**
19
 * 三级区域划分
20
 *
21
 * Class Regional
22
 * @package Shop
23
 */
24
class Regional
25
{
26
    private $data = array(
27
        'Country' => array(
28
            array(
29
                'name' => '中国',
30
                'Province' => array(
31
                    array(
32
                        'name' => '北京市',
33
                        'City' =>array(
34
                            '北京市'
35
                        )
36
                    ),
37
                    array(
38
                        'name' => '天津市',
39
                        'City' =>array(
40
                            '天津市'
41
                        )
42
                    ),
43
                    array(
44
                        'name' => '河北省',
45
                        'City' =>array(
46
                            '石家庄市', '唐山市',   '秦皇岛市', '邯郸市', '邢台市',
47
                            '保定市',   '张家口市', '承德市',   '沧州市', '廊坊市',
48
                            '衡水市'
49
                        )
50
                    ),
51
                    array(
52
                        'name' => '山西省',
53
                        'City' =>array(
54
                             '太原市', '大同市', '阳泉市', '长治市', '晋城市','朔州市',
55
                            '晋中市', '运城市', '忻州市', '临汾市','吕梁市'
56
                        )
57
                    ),
58
                    array(
59
                        'name' => '内蒙古自治区',
60
                        'City' =>array(
61
                            '呼和浩特市','包头市','乌海市','赤峰市','通辽市','鄂尔多斯市','呼伦贝尔市','巴彦淖尔市',
62
                            '乌兰察布市','兴安盟','锡林郭勒盟','阿拉善盟'
63
                        )
64
                    ),
65
                    array(
66
                        'name' => '辽宁省',
67
                        'City' =>array(
68
                            '沈阳市','大连市','鞍山市','抚顺市','本溪市','丹东市','锦州市','营口市','阜新市','辽阳市',
69
                            '盘锦市','铁岭市','朝阳市','葫芦岛市'
70
                        )
71
                    ),
72
                    array(
73
                        'name' => '吉林省',
74
                        'City' =>array(
75
                            '长春市','吉林市','四平市','辽源市','通化市','白山市','松原市','白城市','延边朝鲜族自治州'
76
                        )
77
                    ),
78
                    array(
79
                        'name' => '黑龙江省',
80
                        'City' =>array(
81
                            '哈尔滨市','齐齐哈尔市','鸡西市','鹤岗市','双鸭山市','大庆市','伊春市','佳木斯市','七台河市',
82
                            '牡丹江市','黑河市','绥化市','大兴安岭地区'
83
                        )
84
                    ),
85
                    array(
86
                        'name' => '上海市',
87
                        'City' =>array(
88
                            '上海市'
89
                        )
90
                    ),
91
                    array(
92
                        'name' => '江苏省',
93
                        'City' =>array(
94
                            '南京市','无锡市','徐州市','常州市','苏州市','南通市','连云港市','淮安市','盐城市','扬州市',
95
                            '镇江市','泰州市','宿迁市'
96
                        )
97
                    ),
98
                    array(
99
                        'name' => '浙江省',
100
                        'City' =>array(
101
                            '杭州市','宁波市','温州市','嘉兴市','湖州市','绍兴市','金华市','衢州市','舟山市','台州市',
102
                            '丽水市'
103
                        )
104
                    ),
105
                    array(
106
                        'name' => '安徽省',
107
                        'City' =>array(
108
                            '合肥市','芜湖市','蚌埠市','淮南市','马鞍山市','淮北市','铜陵市','安庆市','黄山市','滁州市',
109
                            '阜阳市','宿州市','六安市','亳州市','池州市','宣城市'
110
                        )
111
                    ),
112
                    array(
113
                        'name' => '福建省',
114
                        'City' =>array(
115
                            '福州市','厦门市','莆田市','三明市','泉州市','漳州市','南平市','龙岩市','宁德市'
116
                        )
117
                    ),
118
                    array(
119
                        'name' => '江西省',
120
                        'City' =>array(
121
                            '南昌市','景德镇市','萍乡市','九江市','新余市','鹰潭市','赣州市','吉安市','宜春市',
122
                            '抚州市','上饶市'
123
                        )
124
                    ),
125
                    array(
126
                        'name' => '山东省',
127
                        'City' =>array(
128
                            '济南市','青岛市','淄博市','枣庄市','东营市','烟台市','潍坊市','济宁市','泰安市','威海市',
129
                            '日照市','莱芜市','临沂市','德州市','聊城市','滨州市','菏泽市'
130
                        )
131
                    ),
132
                    array(
133
                        'name' => '河南省',
134
                        'City' =>array(
135
                            '郑州市','开封市','洛阳市','平顶山市','安阳市','鹤壁市','新乡市','焦作市','濮阳市',
136
                            '许昌市','漯河市','三门峡市','南阳市','商丘市','信阳市','周口市','驻马店市','省直辖县级行政区划'
137
                        )
138
                    ),
139
                    array(
140
                        'name' => '湖北省',
141
                        'City' =>array(
142
                            '武汉市','黄石市','十堰市','宜昌市','襄阳市','鄂州市','荆门市','孝感市','荆州市','黄冈市',
143
                            '咸宁市','随州市','恩施土家族苗族自治州','省直辖县级行政区划'
144
                        )
145
                    ),
146
                    array(
147
                        'name' => '湖南省',
148
                        'City' =>array(
149
                            '长沙市','株洲市','湘潭市','衡阳市','邵阳市','岳阳市','常德市','张家界市','益阳市','郴州市',
150
                            '永州市','怀化市','娄底市','湘西土家族苗族自治州'
151
                        )
152
                    ),
153
                    array(
154
                        'name' => '广东省',
155
                        'City' =>array(
156
                            '广州市','韶关市','深圳市','珠海市','汕头市','佛山市','江门市','湛江市','茂名市','肇庆市',
157
                            '惠州市','梅州市','汕尾市','河源市','阳江市','清远市','东莞市','中山市','潮州市','揭阳市','云浮市'
158
                        )
159
                    ),
160
                    array(
161
                        'name' => '广西壮族自治区',
162
                        'City' =>array(
163
                            '南宁市','柳州市','桂林市','梧州市','北海市','防城港市','钦州市','贵港市','玉林市','百色市',
164
                            '贺州市','河池市','来宾市','崇左市'
165
                        )
166
                    ),
167
                    array(
168
                        'name' => '海南省',
169
                        'City' =>array(
170
                            '海口市','三亚市','三沙市','省直辖县级行政区划'
171
                        )
172
                    ),
173
                    array(
174
                        'name' => '重庆市',
175
                        'City' =>array(
176
                            '重庆市'
177
                        )
178
                    ),
179
                    array(
180
                        'name' => '四川省',
181
                        'City' =>array(
182
                            '成都市','自贡市','攀枝花市','泸州市','德阳市','绵阳市','广元市','遂宁市','内江市','乐山市',
183
                            '南充市','眉山市','宜宾市','广安市','达州市','雅安市','巴中市','资阳市','阿坝藏族羌族自治州',
184
                            '甘孜藏族自治州','凉山彝族自治州'
185
                        )
186
                    ),
187
                    array(
188
                        'name' => '贵州省',
189
                        'City' =>array(
190
                            '贵阳市','六盘水市','遵义市','安顺市','毕节市','铜仁市','黔西南布依族苗族自治州',
191
                            '黔东南苗族侗族自治州','黔南布依族苗族自治州',
192
                        )
193
                    ),
194
                    array(
195
                        'name' => '云南省',
196
                        'City' =>array(
197
                            '昆明市','曲靖市','玉溪市','保山市','昭通市','丽江市','普洱市','临沧市','楚雄彝族自治州',
198
                            '红河哈尼族彝族自治州','文山壮族苗族自治州','西双版纳傣族自治州','大理白族自治州',
199
                            '德宏傣族景颇族自治州','怒江傈僳族自治州','迪庆藏族自治州'
200
                        )
201
                    ),
202
                    array(
203
                        'name' => '西藏自治区',
204
                        'City' =>array(
205
                            '拉萨市','昌都地区','山南地区','日喀则地区','那曲地区','阿里地区','林芝地区'
206
                        )
207
                    ),
208
                    array(
209
                        'name' => '陕西省',
210
                        'City' =>array(
211
                            '西安市','铜川市','宝鸡市','咸阳市','渭南市','延安市','汉中市','榆林市','安康市','商洛市'
212
                        )
213
                    ),
214
                    array(
215
                        'name' => '甘肃省',
216
                        'City' =>array(
217
                            '兰州市','嘉峪关市','白银市','武威市','张掖市','平凉市','酒泉市','庆阳市','定西市','陇南市',
218
                            '临夏回族自治州','甘南藏族自治州'
219
                        )
220
                    ),
221
                    array(
222
                        'name' => '青海省',
223
                        'City' =>array(
224
                            '西宁市','海东地区','海北藏族自治州','黄南藏族自治州','海南藏族自治州','果洛藏族自治州',
225
                            '海西蒙古族藏族自治州','玉树藏族自治州'
226
                        )
227
                    ),
228
                    array(
229
                        'name' => '宁夏回族自治区',
230
                        'City' =>array(
231
                            '银川市','石嘴山市','吴忠市','固原市','中卫市'
232
                        )
233
                    ),
234
                    array(
235
                        'name' => '新疆维吾尔自治区',
236
                        'City' =>array(
237
                            '乌鲁木齐市','克拉玛依市','吐鲁番地区','哈密地区','昌吉回族自治州','博尔塔拉蒙古自治州',
238
                            '巴音郭楞蒙古自治州','阿克苏地区','克孜勒苏柯尔克孜自治州','喀什地区','和田地区',
239
                            '伊犁哈萨克自治州','塔城地区','阿勒泰地区','自治区直辖县级行政区划'
240
                        )
241
                    ),
242
                )
243
            )
244
        ),
245
    );
246
247
    /**
248
     * 获得国家,省份,地级市
249
     *
250
     * @param string $type
251
     * @param string $country
252
     * @param null $province
253
     * @return array
254
     */
255
    private function get($type = 'Country', $country = '中国', $province = null)
256
    {
257
        $data = array();
258
259
        foreach ($this->data['Country'] as $k => $countrys) {
260
261
            if ($type == 'Country') {
262
                $data[] = $countrys['name'];
263
                continue;
264
            }
265
266
            if ($countrys['name'] == $country) {
267
268
                foreach ($countrys['Province'] as $provinces) {
269
270
                    if ($type == 'Province') {
271
                        $data[] = $provinces['name'];
272
                        continue;
273
                    }
274
275
                    $province = is_array($province) ? $province : array($province) ;
276
277
                    if ((empty($province) || !$province) && $type == 'City') {
0 ignored issues
show
Bug Best Practice introduced by
The expression $province of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
278
                        if ($provinces['name'] == $province) {
279
280
                            return $provinces['City'];
281
282
                        }
283
                    } else {
284
285
                        foreach ($province as $v) {
286
287
                            if ($provinces['name'] == $v) $data[] = $provinces['City'];
288
                        }
289
                    }
290
291
292
293
                }
294
            }
295
        }
296
297
        return $data;
298
    }
299
300
    /**
301
     * 获得国家
302
     *
303
     * @return array
304
     */
305
    public function getCountry()
306
    {
307
        return $this->get();
308
    }
309
310
    /**
311
     * 获得省份
312
     *
313
     * @param string $country
314
     * @return array
315
     */
316
    public function getProvince($country = '中国')
317
    {
318
        return $this->get('Province',$country);
319
    }
320
321
    /**
322
     * 获得地级市
323
     *
324
     * @param string|array $province 支持 , 数组 str 参数传入
325
     * @param string $country
326
     * @return array
327
     */
328
    public function getCity($province,$country = '中国')
329
    {
330
        return $this->get('City',$country,$province);
0 ignored issues
show
Documentation introduced by
$province is of type string|array, but the function expects a null.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
331
    }
332
}