private static function optimizeMatcherOrder(array $matchers): array
    {
        $computationalCostOrder = [
            AnyMatcher::class,
            StaticMatcher::class,
            ExpressionMatcher::class,
            RegexMatcher::class,
            // Unknown types last
            SegmentMatcherContract::class,
        ];

        $groups = [];

        foreach ($computationalCostOrder as $type) {
            foreach ($matchers as $index => $matcher) {
                if ($matcher instanceof $type) {
                    unset($matchers[$index]);
                    $groups[$index] = $matcher;
                }
            }
        }

        return $groups;
    }
private static function optimizeMatcherOrder(array $matchers): array
    {
        $computationalCostOrder = [
            AnyMatcher::class,
            StaticMatcher::class,
            ExpressionMatcher::class,
            RegexMatcher::class,
            // Unknown types last
            SegmentMatcherContract::class,
        ];

        $groups = [];

        foreach ($computationalCostOrder as $type) {
            foreach ($matchers as $index => $matcher) {
                if ($matcher instanceof $type) {
                    unset($matchers[$index]);
                    $groups[$index] = $matcher;
                }
            }
        }

        return $groups;
    }
private static function optimizeMatcherOrder ( array $ matchers ) : array { $ computationalCostOrder = [ AnyMatcher :: class , StaticMatcher :: class , ExpressionMatcher :: class , RegexMatcher :: class , // Unknown types last SegmentMatcherContract :: class , ] ; $ groups = [ ] ; foreach ( $ computationalCostOrder as $ type ) { foreach ( $ matchers as $ index => $ matcher ) { if ( $ matcher instanceof $ type ) { unset ( $ matchers [ $ index ] ) ; $ groups [ $ index ] = $ matcher ; } } } return $ groups ; }
Optimizing the matcher order, unknown types are added last.

@param array $matchers

@return array
Optimizing the matcher order unknown types are added last .