Test Failed
Push — master ( 614e1a...5c1cf2 )
by gt9000
13:11
created

RouteGenerator::combineVarRoutes()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 29
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 17
nc 3
nop 1
dl 0
loc 29
rs 8.8571
c 0
b 0
f 0
1
<?php
2
3
namespace zqhong\route;
4
5
class RouteGenerator
6
{
7
    /**
8
     * 将多个独立的动态路由表达式合并为一个
9
     *
10
     * @param array $varRoutes
11
     * @return array|bool
12
     */
13
    public function combineVarRoutes($varRoutes)
14
    {
15
        if (empty($varRoutes)) {
16
            return false;
17
        }
18
19
        $routeMap = $regexes = [];
20
        $numGroups = 0;
21
22
        /** @var Route $route */
23
        foreach ($varRoutes as $route) {
24
            $numVariables = count($route->params);
25
            $numGroups = max($numGroups, $numVariables);
26
27
            $regexes[] = $route->route . str_repeat('()', $numGroups - $numVariables);
28
            $routeMap[$numGroups + 1] = [
29
                'handler' => $route->handler,
30
                'params' => $route->params,
31
            ];
32
33
            ++$numGroups;
34
        }
35
36
        $regex = sprintf('~^(?|%s)$~', implode('|', $regexes));
37
        return [
38
            'regex' => $regex,
39
            'routeMap' => $routeMap,
40
        ];
41
    }
42
}
43