public function build(array $routes): array
    {
        $rootRouteData = null;
        $nodes         = [];
        $groupedRoutes = [];

        foreach ($routes as $route) {
            $groupedRoutes[\count($route->getSegments())][] = $route;
        }

        if (isset($groupedRoutes[0])) {
            $rootRouteData = new MatchedRouteDataMap();
            $rootRouteData->addRoute($groupedRoutes[0][0], []);

            unset($groupedRoutes[0]);
        }

        foreach ($groupedRoutes as $segmentDepth => $group) {
            $groupNodes = [];

            foreach ($group as $route) {
                $parameterIndexNameMap = [];
                $segments              = $route->getSegments();
                $segmentMatcher        = $this->getMatcher(\array_shift($segments), $parameterIndexNameMap);
                $firstSegmentHash      = $segmentMatcher->getHash();

                if (! isset($groupNodes[$firstSegmentHash])) {
                    $groupNodes[$firstSegmentHash] = new RouteTreeNode(
                        [0 => $segmentMatcher],
                        $segmentDepth === 1 ? new MatchedRouteDataMap() : new ChildrenNodeCollection()
                    );
                }

                $this->addRouteToNode($groupNodes[$firstSegmentHash], $route, $segments, 1, $parameterIndexNameMap);
            }

            $nodes[$segmentDepth] = new ChildrenNodeCollection($groupNodes);
        }

        return [$rootRouteData, $nodes];
    }
public function build(array $routes): array
    {
        $rootRouteData = null;
        $nodes         = [];
        $groupedRoutes = [];

        foreach ($routes as $route) {
            $groupedRoutes[\count($route->getSegments())][] = $route;
        }

        if (isset($groupedRoutes[0])) {
            $rootRouteData = new MatchedRouteDataMap();
            $rootRouteData->addRoute($groupedRoutes[0][0], []);

            unset($groupedRoutes[0]);
        }

        foreach ($groupedRoutes as $segmentDepth => $group) {
            $groupNodes = [];

            foreach ($group as $route) {
                $parameterIndexNameMap = [];
                $segments              = $route->getSegments();
                $segmentMatcher        = $this->getMatcher(\array_shift($segments), $parameterIndexNameMap);
                $firstSegmentHash      = $segmentMatcher->getHash();

                if (! isset($groupNodes[$firstSegmentHash])) {
                    $groupNodes[$firstSegmentHash] = new RouteTreeNode(
                        [0 => $segmentMatcher],
                        $segmentDepth === 1 ? new MatchedRouteDataMap() : new ChildrenNodeCollection()
                    );
                }

                $this->addRouteToNode($groupNodes[$firstSegmentHash], $route, $segments, 1, $parameterIndexNameMap);
            }

            $nodes[$segmentDepth] = new ChildrenNodeCollection($groupNodes);
        }

        return [$rootRouteData, $nodes];
    }
public function build ( array $ routes ) : array { $ rootRouteData = null ; $ nodes = [ ] ; $ groupedRoutes = [ ] ; foreach ( $ routes as $ route ) { $ groupedRoutes [ \ count ( $ route -> getSegments ( ) ) ] [ ] = $ route ; } if ( isset ( $ groupedRoutes [ 0 ] ) ) { $ rootRouteData = new MatchedRouteDataMap ( ) ; $ rootRouteData -> addRoute ( $ groupedRoutes [ 0 ] [ 0 ] , [ ] ) ; unset ( $ groupedRoutes [ 0 ] ) ; } foreach ( $ groupedRoutes as $ segmentDepth => $ group ) { $ groupNodes = [ ] ; foreach ( $ group as $ route ) { $ parameterIndexNameMap = [ ] ; $ segments = $ route -> getSegments ( ) ; $ segmentMatcher = $ this -> getMatcher ( \ array_shift ( $ segments ) , $ parameterIndexNameMap ) ; $ firstSegmentHash = $ segmentMatcher -> getHash ( ) ; if ( ! isset ( $ groupNodes [ $ firstSegmentHash ] ) ) { $ groupNodes [ $ firstSegmentHash ] = new RouteTreeNode ( [ 0 => $ segmentMatcher ] , $ segmentDepth === 1 ? new MatchedRouteDataMap ( ) : new ChildrenNodeCollection ( ) ) ; } $ this -> addRouteToNode ( $ groupNodes [ $ firstSegmentHash ] , $ route , $ segments , 1 , $ parameterIndexNameMap ) ; } $ nodes [ $ segmentDepth ] = new ChildrenNodeCollection ( $ groupNodes ) ; } return [ $ rootRouteData , $ nodes ] ; }
Creates a route tree from the supplied routes.

@param \Viserio\Component\Contract\Routing\Route[] $routes

@return array
Creates a route tree from the supplied routes .