private static function find_route($request_segments, $arguments = []) { foreach (array_reverse(self::$routes) as $rt => $ctrl) { $args = $arguments; $route_segments = explode('/', $rt); $count = 0; // concurrently loop through route and uri segments if (count($request_segments) === count($route_segments)) { foreach ($route_segments as $rt_seg) { $length = count($route_segments); if (isset($request_segments[$count]) && ($rt_seg === $request_segments[$count] || isset($rt_seg[0]) && $rt_seg[0] === ':')) { // assign templated key=>value pairs if (isset($rt_seg[0]) && $rt_seg[0] === ':') { $key = substr($rt_seg, 1); $value = $request_segments[$count]; $args[$key] = $value; } $count += 1; // resolve with template and key=>values if template successfully processes uri if ($count === $length) { $parts = explode('#', $ctrl); array_shift($route_segments); $route_id = implode('/', $route_segments); Router::$current_route_template = $route_id; return ['ctrl' => $parts[0] . 'Ctrl', 'method' => $parts[1], 'args' => $args, 'route_template' => $route_id]; } // exit route if template match failed } else { break; } } } } return FALSE; }